C++多线程调用同一个函数,怎么对函数加锁

C++多线程调用同一个函数,怎么对函数加锁,第1张

代码是只读的,所以代码本身并不需要加锁。但是如果代码访问了不能共享的资源,那么就必须为这些资源加锁。

InitializeCriticalSection(&cs);//初始化

EnterCriticalSection(&cs);//进入

//函数内容

LeaveCriticalSection(&cs);//离开

DeleteCriticalSection(&cs);//删除

最简单的方法,把这个变量加锁,或者把函数方法加锁,使其同一时间只能被一个线程调用。

但这样牺牲了效率,所以首先你还是得思考以下问题:

1这个变量值会被其他线程改变吗?

如果1的回答是否定的,那么线程之间应该不会受影响

如果是肯定的,思考问题:

2一定要在其他线程中改变这个变量吗?

如果是否定的,考虑使用临时变量或者局部变量代替原变量

如果肯定的,还是考虑加锁吧

暂时想到这么多,欢迎补充:)

你对多线程的理解可能有偏,多线程是允许在同一时间内调用同一函数的。

在多线程编程中要注意解决的问题,是防止对全局对象或变量的同时访问。主要有三种策略,

第一,加锁对象;

第二,使用临界区

第三,使用多读排它写的同步机制。

详细说明,delphi的帮助文档中都有。

使用pthread库执行多线程,这个是Linux下的线程库 Windows下应该有自己的API,不过这种东西一般还是以Linux为标准。pthread_create()创建一个线程,传入fun()的函数指针就行了。 然后这个Beep()的需求要进行线程间通信,可以用共享内存的方法,

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13491733.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存