【发布时间】:2012-09-04 05:18:14
【问题描述】:
我为我的项目制作了一个手工制作的互斥锁,但我怀疑它是否是线程安全的......
bool blocked;
while ( blocked )
{
}
blocked = true;
...
blocked = false;
假设线程 A 通过了 while 循环并且没有及时阻塞标志(没有时间将标志设置为false),线程 B 也通过了 while 循环!
有可能吗?为什么?
据我了解,mutex 具有完全相同的工作原理。为什么这不能发生在互斥体中?我读过关于不能被中断的原子操作......所以
check-if-mutex-available和mutex-block不能被中断,对吧?
【问题讨论】:
-
我的第一个建议是不要这样做。我的第二个建议是不要这样做!使用像
std::mutex这样的正确互斥体,它们经过测试,可以工作并且绝对是线程安全的。 -
我想使用
pthread_mutex_t。这个实现好吗?我既不能使用boost也不能使用c++11 -
pthread 互斥锁很好。
-
@JoachimPileborg 谢谢!
标签: c++ algorithm mutex atomic mutual-exclusion