【发布时间】:2016-05-15 04:16:29
【问题描述】:
通常当我想让函数线程安全时,我会锁定共享数据,然后在完成工作后释放。
这里我正在使用一个全局变量。简单地锁定和解锁并不能确保函数返回唯一值。如何将以下函数修改为线程安全并确保它始终返回唯一整数?
int count = 0;
int GetUnique()
{
count = count + 1;
return count;
}
有人提到在函数内部创建一个局部静态变量?这将如何以及为什么会起作用(如果为真)?
【问题讨论】:
-
函数不需要返回
count。int local_count; lock(); count = count + 1; local_count = count; unlock(); return local_count;? -
@iharob - 锁定/解锁是多余的,CPU 有专门的指令来处理这个确切的用例,根本没有任何锁定。
-
@Geoffrey 我假设这是必需的,因为它看起来像家庭作业或类似的东西。
-
@Geoffrey:要以便携的方式执行此操作,无法锁定和解锁。
-
@iharob:为什么不把这个作为答案呢?
标签: c multithreading thread-safety locking