一部の言語ではミューテックス ロックが提供されていないため、自分でビルドする必要があります。私は通常、次のようなコードを書きます。
oldval = 0;
newval = 1;
//suggest there was a Compare And Set operation that make only one thread return true,if no CAS operation , call any other language module that can offer a cas instead
while (!CAS(*somepointer,oldval,newval)) {
//lock failed
sleep(1000); //sleep one second or some value really depend on what you are doing.
}
//lock succeed, do something....
*somepointer = oldval; //release lock.
当然sleep
処理速度は遅くなりますが、sleep
を破棄すると… スレッドの切り替えが頻繁になりすぎてパフォーマンスが低下するのではないか?深く考えると、どのようにsleep
実装されていますか? 彼らがこのようなことをしたら...
expired = getCurrentTime() + sleepTime;
while (getCurrentTime() < expired) { }
...これは事態を悪化させるだけです。
sleep
スレッドをしばらく一時停止する必要がある場合にのみ使用する必要があると思うので、私の場合は間違っているかもしれません。