当前位置:编程学习 > C#/ASP.NET >>

多线程中碰到奇怪的事情 求破

如图 写了个多线程 进行广度优先的搜索
自定义了一个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楼 --------------------编程问答--------------------
引用 楼主 gover520 的回复:
...
附自写的加锁 解锁代码:

你的实现代码有错误:
1、Lockit()不是原子操作,有可能多个线程同时Lockit成功。
2、Lockit()里面的空循环等待会消耗大量的CPU。

建议你直接使用lock关键字。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,