
代码是只读的,所以代码本身并不需要加锁。但是如果代码访问了不能共享的资源,那么就必须为这些资源加锁。
InitializeCriticalSection(&cs);//初始化
EnterCriticalSection(&cs);//进入
//函数内容
LeaveCriticalSection(&cs);//离开
DeleteCriticalSection(&cs);//删除
最简单的方法,把这个变量加锁,或者把函数方法加锁,使其同一时间只能被一个线程调用。
但这样牺牲了效率,所以首先你还是得思考以下问题:
1这个变量值会被其他线程改变吗?
如果1的回答是否定的,那么线程之间应该不会受影响
如果是肯定的,思考问题:
2一定要在其他线程中改变这个变量吗?
如果是否定的,考虑使用临时变量或者局部变量代替原变量
如果肯定的,还是考虑加锁吧
暂时想到这么多,欢迎补充:)
你对多线程的理解可能有偏,多线程是允许在同一时间内调用同一函数的。
在多线程编程中要注意解决的问题,是防止对全局对象或变量的同时访问。主要有三种策略,
第一,加锁对象;
第二,使用临界区
第三,使用多读排它写的同步机制。
详细说明,delphi的帮助文档中都有。
使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。 然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)