问题标签 [condition-variable]

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 回答
8833 浏览

synchronization - 条件变量

条件变量在操作系统进程同步中的原理是什么?

0 投票
3 回答
1954 浏览

multithreading - 条件变量的成本是多少?

假设有问题的机器上有未使用的执行资源可用,即并非所有 CPU 都在使用。如果一个线程正在等待一个条件变量,那么唤醒这个线程的相关成本是多少?同样,等待条件变量的相关成本是多少?我对粗略的量化和成本的来源都很感兴趣。就答案是“视情况而定”而言,我主要关心 x86/x64 上的最新版本的 Windows 和 Linux。

编辑:由于涉及内核调用,内核调用比常规函数调用贵多少?

0 投票
2 回答
1146 浏览

c++ - C++:线程同步

我正在尝试使用 Boost 库同步两个线程(在同一个 C++ 映射上工作)。我必须说我不是 C++ 专家,而且我发现 boost 文档很难理解。

我想要实现的是这样的:

我尝试使用 Mutex 和 condition_variables,但代码无法正常工作。具体来说,当 thread2 唤醒时(在等待 cond. 变量之后),它并没有直接访问地图,但是还有其他人获得了访问权限并清空了地图。因此,我遇到了分段错误,因为当我访问它时,我期望地图是满的,而它是空的。

另外,我想了解 likemymutex.lock()和 invokations like之间的区别boost::mutex::scoped_lock scopedLock(mutex_);或unique_lock

谢谢教导:)

编辑:在这里我试图提取我的代码的相关部分。由于我不太了解同步的工作原理,因此可能没有多大意义......

0 投票
1 回答
7609 浏览

c - 如何使用条件变量

Linux Programming Interface book 有一段代码(生产者/消费者)来展示条件变量的工作原理:

为什么我们使用pthread_mutex_lockin while?为什么我们不在一个中使用它if

0 投票
4 回答
1492 浏览

c - 被 pthread_cond_signal() 唤醒但失去对互斥锁竞争的线程会发生什么

关于这个: 如何使用条件变量

假设我们有多个执行此类代码的消费者线程(从引用的页面复制):

我假设这里的场景是:主线程调用 pthread_cond_signal() 来告诉消费者线程做一些工作。

据我了解 - 后续线程调用 pthread_mutex_lock() 然后调用 pthread_cond_wait() (它以原子方式解锁互斥锁)。到目前为止,没有一个消费者线程正在声明互斥锁,它们都在等待 pthread_cond_wait()。

当主线程调用 pthread_cond_signal() 时,按照手册页,至少一个线程被唤醒。当它们中的任何一个从 pthread_cond_wait() 返回时,它会自动声明互斥锁。

所以我的问题是:关于提供的示例代码现在会发生什么?即,在互斥锁竞争中输掉的线程现在在做什么?

(AFAICT 赢得互斥锁的线程应该运行其余代码并释放互斥锁。丢失的线程应该卡在互斥锁上等待 - 在第一个嵌套 while循环中的某个地方 - 而获胜者持有它并在它被释放后开始阻塞 pthread_cond_wait() 因为到while (avail == 0)那时就会满足。我正确吗?)

0 投票
4 回答
4306 浏览

c++ - Windows 中的 CONDITION_VARIABLE;不会编译

我正在尝试用 C++ 制作为 Linux 编写的程序的 Windows 版本。为了程序是线程安全的,我在 Linux 版本中使用pthread_cond_t和。pthread_cond_wait这些函数使用互斥锁来帮助确保等待的线程实际上正在等待。

我发现这CONDITION_VARIABLE可能在 Windows 中起作用,但是我不知道为什么它不能编译。据我所知,即使包含所有相关标头,我也会收到错误“错误:'CONDITION_VARIABLE' 没有命名类型”。我尝试在http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspx上复制粘贴代码,但也无法编译。我正在使用 GCC。

关于如何编译这个的任何想法?或任何不涉及条件变量的替代方法?

0 投票
1 回答
1088 浏览

c - 打破条件变量死锁

我有一种情况,线程 1 正在等待一个条件变量 A,它应该被线程 2 唤醒。现在线程 2 正在等待一个条件变量 B,它应该被线程 1 唤醒。在我正在使用的场景中条件变量,我无法避免这样的死锁情况。我检测到循环(死锁)并终止参与死锁的线程之一。

现在,我不确定如何简单地终止一个线程,比如说线程 1,它正在等待一个条件变量。

将不胜感激一些指点。谢谢

0 投票
2 回答
98 浏览

c - 在许多等待条件变量的线程中发出特定线程的信号

这个问题来自Breaking a condition variable deadlock。许多线程可能正在等待条件变量,我只需要向特定线程发出信号,比如线程 1 并杀死它,因为它是死锁场景的参与者。有没有办法我可以在很多中只发出一个特定的线程。

将不胜感激一些帮助

谢谢

编辑;尊重尼莫的评论。我明白这是个坏主意。但是,有没有办法做到这一点

0 投票
0 回答
1878 浏览

mutex - 使用 futex 实现互斥量和条件变量

我已经使用 futex 系统调用实现了互斥量和条件变量。我相信我的实现是正确的,但希望得到其他人的验证。如果你们中的一些人可以验证它的正确性,那将是一个很大的帮助。

任何有关进一步改进互斥锁和连接变量性能的建议也将不胜感激。

谢谢

苏丹舒

0 投票
2 回答
1537 浏览

python - Python threading.Condition.wait() 是否立即暂停执行?

如果我调用wait()python 条件变量,调用线程是暂停执行并产生还是继续阻塞直到下一次上下文切换?