过去两周左右我一直在处理线程,我想问有关线程的问题。
尽管我知道它们,但我从未处理过单个互斥体。为什么?因为我在这里使用非常简单的布尔开关(C++,示例线程):
bool fakeMutex = false;
...
while (fakeMutex);
fakeMutex = true;
// do smth
fakeMutex = false;
我一直在考虑这个问题,我开始相信它会失败的可能性很小(但我相信可能的机会)。
鉴于在组装中这些理论上应该是这样的:
Compare:
CMP 0,[offset fakeMutex]
JG Compare
MOV [offset fakeMutex],1
; do smth
MOV [offset fakeMutex],0
这个互斥锁可能失败的唯一方法是如果 CMP 0,[offset fakeMutex] 在 fakeMutex 为假时执行,然后在另一个线程接管之后立即执行 MOV [offset fakeMutex],1 然后 OLD 线程返回作业执行程序集它不应该。
很有可能吗?
boost::thread 中定义的普通互斥锁有什么优点?它如何确保组件不能被拆分?它是否像上面示例中的布尔“互斥锁”一样快?