标签:critical-section c multithreading
我有一个简单的类,有一个私有成员,可以通过多线程环境中的get()和set()访问(多读者/多作者).如何锁定Get(),因为它只有一个return语句?
class MyValue
{
private:
System::CriticalSection lock;
int val { 0 };
public:
int SetValue(int arg)
{
lock.Enter();
val = arg;
lock.Leave();
}
int GetValue()
{
lock.Enter();
return val;
//Where should I do lock.Leave()?
}
}
解决方法:
不要锁定任何东西.在您的示例中,如果您使您的成员成为std :: atomic整数就足够了.
你这里不需要任何其他东西.事实上,由于英特尔架构(强大的内存排序模型),这个std :: atomic甚至不会引起任何性能问题.
标签:critical-section,c,multithreading 来源: https://codeday.me/bug/20190724/1525635.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。