问题标签 [critical-section]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1080 浏览

database - 如何使用事务数据库来创建关键部分?

假设我有 2 台服务器与同一个事务数据库通信。

我想将其设置为只有这两个服务器中的一个将执行给定的定时操作(本质上是使用数据库来强制同步)。据我所知,类似这样的事情可能会奏效:

假设我的表 TABLE 有 2 列,ID 和 STATUS。如果我这样设置代码:

这会起作用吗,还是我在这里遗漏了一些概念?

0 投票
6 回答
3285 浏览

c++ - C++:并发和析构函数

假设您有一个可以被许多线程访问的对象。临界区用于保护敏感区域。但是析构函数呢?即使我一进入析构函数就进入临界区,一旦析构函数被调用,对象是否已经失效?

我的思路:假设我进入析构函数,我必须等待临界区,因为其他线程仍在使用它。一旦他完成了,我就可以完成对对象的破坏。这有意义吗?

0 投票
4 回答
2315 浏览

c - C - pthread 函数重用 - 局部变量和竞争条件

如果我定义了一个线程函数,它重用了主线程也使用的另一个函数......是否可能存在竞争条件?同一函数中的局部变量是否跨线程共享?在这种情况下,函数 do_work 用于 thread_one 线程和主线程。两个线程都可以修改函数 do_work 中的局部变量 x 从而产生意想不到的结果吗?

0 投票
4 回答
6019 浏览

c++ - TryEnterCriticalSection

我不确定我是否理解正确。TryEnterCriticalSection只调用一次,它不像棒EnterCriticalSection?例如,如果我写类似

如果TryEnterCriticalSection返回 false,则该部分do something that must be synh将永远不会完成,并且do other job部分将被执行,然后go on

0 投票
1 回答
1690 浏览

c++ - 两个线程访问的共享队列的临界区代码是什么?

假设我们有一个共享队列(使用数组实现),两个线程可以访问该队列,一个用于从中读取数据,另一个用于向其写入数据。现在,我有一个同步问题。我正在使用 Win32 API(EnterCriticalSection 等)来实现这一点。

但我的好奇心是队列的入队和出队操作中的关键部分代码是什么?

仅仅因为,两个线程正在使用共享资源?为什么我看不到任何问题是:前后端都维护了,所以当ReaderThread读取时,它可以从前端读取,而当WriterThread写入时,它可以轻松地写入后端。

可能会出现哪些潜在问题?

0 投票
1 回答
72 浏览

c++ - 为什么在我推送包含关键部分的对象时出现内存错误?

请告诉我导致错误的原因以及如何解决。

0 投票
1 回答
1786 浏览

c++ - 关键部分的最简单实现?

在我的一种 C++ 方法中,我必须以这样一种方式执行此操作,即在给定时间只有一个线程访问这段代码。

谁能指导我实现这一目标的最简单和最好最小(代码明智)的方法是什么?我不想使用Boost Library,也不想为了实现这一点而在我的代码中弄得一团糟。我正在寻找一个标准的 C++ 解决方案,而不是只适用于 Windows 的东西。

0 投票
1 回答
90 浏览

thread-safety - 关于一个容器的线程安全问题

让我们稍微谈谈理论。我们有一个容器,我们称它为 TMyObj,如下所示:

让一个名为 TMyClass 的类有一个上面的容器数组 + 3 个有用的函数。一种用于获取要更新的对象。一种用于向某个对象添加更新信息,一种用于获取更新的对象。它也按此顺序调用。这是课程

现在想象 5+ 个线程使用前两个线程,另一个线程在上面类的一个实例上使用最后一个函数 (getUpdadtedObj)。

问题:如果最后一个函数中没有关键部分,它会是线程安全的吗?

0 投票
2 回答
9090 浏览

c++ - 如何使用 Boost 制作关键部分?

对于我的跨平台应用程序,我已经开始使用 Boost,但我无法理解如何实现代码来重现 Win32 的关键部分或 .Net 的行为lock

我想编写一个Foo可以从不同线程调用的方法来控制对共享字段的写操作。应该允许在同一线程内进行递归调用(Foo() -> Foo())。

在 C# 中,这个实现非常简单:

0 投票
4 回答
1187 浏览

linux - 为什么要使用 pthread_mutex_lock,而同样可以以可编程的方式完成?

我们都知道信号量和临界区问题。

在 pthreads 中,这可以使用pthread_mutex_lock( )和进行排序pthread_mutex_unlock( )

但是为什么我们需要这些系统调用,当它们可以在代码中实现时,通过执行以下操作:

和上面一样,能解决临界区问题吗?如果不是,那为什么?