多线程中碰到奇怪的事情 求破
如图 写了个多线程 进行广度优先的搜索自定义了一个Lock的bool变量 用于加锁和解锁
每次读取前先加锁 然后读取一个url 然后解锁 然后发现如下情况 List_Top>UrlList.count 却能进入if
PS:List_Top表示当前待提取的位置 UrlList是url的数组
窃以为是锁的问题 望大神指教
附自写的加锁 解锁代码:
void Lockit()
{
while (!UrlListLock) ;
UrlListLock = false;
}
void Unlockit()
{
UrlListLock = true;
} C# 多线程 搜索 锁 --------------------编程问答-------------------- UrlListLock的设置要放在Lock中
object lockObj = new object();
lock (lockObj)
{
...
} --------------------编程问答-------------------- 你的加锁解锁函数有问题,参考2楼 --------------------编程问答--------------------
你的实现代码有错误:
1、Lockit()不是原子操作,有可能多个线程同时Lockit成功。
2、Lockit()里面的空循环等待会消耗大量的CPU。
建议你直接使用lock关键字。
补充:.NET技术 , C#