在Outlook中添加一个,我有一个工作线程做了一些处理,然后更新布尔标志。主线程检查这个标志,如果这是错误的,它只是处理一个while循环而什么也不做。如何访问2个线程之间的共享资源?
//worker thread void DoSoneThing() { Outlook.Recipients recps = mail.Recipients. foreach(Outlook.Recipient recp in recps) { //Save each recipients in a colection } isDone=true; } //Main thread while(!isDone) { //read the collection where recipients name have been stored. }``
如果主线程谈到这段代码的工作线程设置标志为true,主线程之前不断处理回路和secondry线程是正中下怀暂停。并且由于isDone标志从不设置为true,所以主线程不会执行任何操作。
当我在DoSomeThing方法中放入一个锁并在mian线程中使用相同的锁时,此问题已得到解决。
myClass { public static object _syncRoot = new Object(); void DoSoneThing() { lock(_syncRoot) { //process isDone=true; } } } myOtherClass { lock(myClass._syncRoot) { //process } }
我的理解是锁用于限制由一个以上的线程的项,以相同的一段代码。但不明白为什么工作线程在共享资源被主线程访问时没有做任何事情。
你跳过所有的(但非常值得做的正确的情况下)。重要的逻辑。请发布Main和DoSomething的实现。 – 2010-06-30 14:02:05