新手求救:现在有2个共享数据结构的资源,暂且叫做A和B吧线程1会对A进行处理(增删等操作)线程2会对B进行操作(同上)线程3要求对A.B同时进行操作(同上)我用2个临界区对象X Y分别来控制A B线程1运行的时候ENTER(A) LEAVE(A);
线程2运行的时候ENTER(X) LEAVE(Y);
而3要求是同时拥有2个临界区对象,这样写基本线程3就跑步起来了请问怎么处理比较合适呢?如果用互斥对象或者事件,怎么合理的设置才能让线程3跑起来?新手,分不多,处理过相同问题的可否指点一下呢

解决方案 »

  1.   

    把A和B及对A、B的操作都封装到类里,然后操作里加锁
      

  2.   

    临界区就可以了int Opt()
    {
    ENTER(A) 
    ........
    LEAVE(A)
    }
      

  3.   

    个人觉得,你不用管它呀。
    在线程3内你也只需要Enter(X),Enter(Y),就可以了。当线程1用完A后,按照系统的线程调度策略,线程3应该会阻塞其他线程对A的控制权,即Enter(X),如果Enter(Y)没有被阻塞,那么线程3就可以运行了。如果阻塞,继续等待就可以了。
    另外无论在单核和多核的计算机上我想都应该是同个道理。
      

  4.   

    我自己试了一下,线程果然能跑起来然后我把我的那个程序说一下我那里面是线程1 使用资源A
     2---C
     3---A B
     4---C D
     5---A B C D按这个思路,我每个都设置了临界区来保护数据资源奇怪的是5总是运行不起来,其他的线程都没有问题