由于某些语言不提供互斥锁,因此需要自己构建它。我通常会写一些这样的代码:(伪C++,只是为了让你知道我的意思。我不确定我的写法是否正确,因为我已经很多年没有写过C++代码了)
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
只有在我真的需要暂停线程一段时间时才应该使用,所以也许我的情况是错误的。