看如下代码
#test.cc
int i=0;
void* funcA(void* arg)
{
for(int i=0;i<10;i++)
{
++i;
}
}
void* funcB(void* arg)
{
for(inti=0;i<10;i--)
{
--i;
}
}
int main()
{
pthread_create(..funcAdd..);
pthread_create(..funcAdd..);
cout << i << endl;
return 0;
}
多线程并发更新全局变量i的值,最终的结果是不确定的。
要想得到预期结果0,需要在对变量i进行递增或者递减操作时,加锁处理。
代码如下:
#test.cc
pthread_mutex_t m_i;
int i=0;
void* funcA(void* arg)
{
for(int i=0;i<10;i++)
{
lock(&m_i);
++i;
unlock(&m_i);
}
}
void* funcB(void* arg)
{
for(inti=0;i<10;i--)
{
lock(&m_