【发布时间】:2015-07-20 14:41:10
【问题描述】:
我对 C++11 的 thread.h api 的知识并不广泛(实际上我也不熟悉线程编程,但我最近读了很多,并且知道并发和类似的东西)但我开始使用它,但我遇到了一个我从未真正遇到过的问题。
我有两个线程函数,说这些
std::thread(thread1, args); // Spawn thread 1
std::thread(thread2, args); // Spawn thread 2
[...]
int thread1(bunch of args)
{
lock_thread_2();
[do stuff]
while (some condition) {
[do stuff]
unlock_thread_2();
}
}
int thread2(bunch of args)
{
while (some condition) {
[do stuff]
wait_for_thread1_to_unlock_me();
}
}
我首先考虑用 std::mutex 来做,但我读到它可能很危险,因为如果我解锁一个已经解锁的互斥锁,行为是未定义的,而且在它之上它无论如何都不会像 mutex.lock 一样工作() 不一定会暂停执行(仅当互斥锁已被锁定时才会暂停),因此编写起来非常可怕,我必须将 unlock() 和 lock() 调用耦合在一起。
这里需要注意的是thread2的执行只由thread1控制,但thread2永远不会以任何方式锁定thread1。只有thread2被thread1锁定,只有thread1控制thread2的执行流程,否则没有。
您将如何以一种干净、受支持的方式做到这一点?能否举个代码示例?
谢谢!
【问题讨论】:
标签: c++ multithreading c++11 concurrency mutex