我想問一下有關多線程的最簡單的Mutex方法。下面的代碼是線程安全的(quick-n-dirty)嗎?有史以來最簡單的互斥體。這個例子工作嗎?它是線程安全的嗎?
class myclass
{
bool locked;
vector<double> vals;
myclass();
void add(double val);
};
void myclass::add(double val)
{
if(!locked)
{
this->locked = 1;
this->vals.push_back(val);
this->locked = 0;
}
else
{
this->add(val);
}
}
int main()
{
myclass cls;
//start parallelism
cls.add(static_cast<double>(rand()));
}
這種工作?它是線程安全的嗎?我只是想了解如何編寫最簡單的互斥鎖。
如果您對我的示例有任何建議,那就太好了。
謝謝。
謝謝你說它不起作用。你能否提出一個獨立於編譯器的解決方案?
制定正確的互斥機制是一項複雜的業務。我會使用已經存在的東西。 – andre 2013-02-11 18:57:52
通常,互斥體等同步原語需要一些原子性(通常在CPU指令級別)。下面是我發現的一個有趣的鏈接:http://lists.canonical.org/pipermail/kragen-tol/1999-August/000457.html – Tom 2013-02-11 19:06:52
最簡單的互斥體(或一般的同步構造)是你不需要的; - ) – delnan 2013-02-11 19:16:03