CSemaphore semaphore(1,1);semaphore.Lock();
class.fun();//执行函数semaphore.Unlock();
上面代码还是有问题 加锁后同样发生冲突CSemaphore semaphore(1,1);semaphore.Lock();
class.fun();//执行函数Sleep(100);
semaphore.Unlock();
加了Sleep(100);后 基本上不会冲突了 但是运行几万次以后还是会冲突如何保证运行百分百不会冲突呢第三方的类库无法修改的
解决方案 »
- vc++ MFC文件对话框
- 弱弱的问一个问题,这个数的范围是多少?
- 我用VC写了一个系统服务,在2000上正常,在XP和2003上不能安装
- 如何给LIST控件发送删除一项指定的ITEM的消息?
- vc用什么函数或类实现屏幕打印?
- 求助!关于对UDP数据包的阻断
- 我在dialog 上显示一个jpg图片,显示时吞食内存,奇怪的是当对话框最小话后,程序又释放内存了,什么原因呢
- 字体问题
- 有没有那位大侠用过SAPI SDK的编程!能不能给点范例或提示
- 我的麻烦:由于我的VC盘和MSDN盘不是一个套装的。在装好VC后,在提示下安装MSDN时,却不能安装。
- 有偿求高人修改EXE界面
- 求助,如何将一个浮点型的二维数组存到ACCESS数据库的OLE对象字段中并读取?
换成临界区(CCriticalSection)或者 事件试试
线程同步也就这几种方法 正确使用 应该能解决
class.fun();//执行函数semaphore.Unlock();
你这段代码是几个线程中都有吗?这种情况肯定不行.
你应该把这段代码包装成一个函数,并且CSemaphore semaphore(1,1);这个要定义成全局的(或类似情况)
class.fun();//执行函数semaphore.Unlock();
这段代码要是多个线程中都有,也可以,主要CSemaphore semaphore(1,1);这个要定义成全局的
换成临界区(CCriticalSection)或者 事件试试这两个不一样么 好像没区别吧?