使用pthreads时,为什么我的计数线程不能正常工作?

时间:2012-10-21 06:27:54

标签: c++ multithreading pointers pthreads

在我的main()函数中,我调用pthread_create来创建一个新线程。我将文本文件的名称传递给它,线程打开文本文件,计算行数,然后将该数字返回main(),我将整数totalCount +=设置为回。

我知道线程函数正常工作,因为我用另一段代码计算了文本文件中的行数。当我使用循环多次调用pthread_create时会出现问题。我计算一个文件时得到的totalCount是准确的,但是当我打开两个或更多文件时,totalCount中的main()是错误的。

我的程序可能会出现什么问题?这是我的线程函数中的问题吗?我的pthread_join?我知道这个问题在没有代码的情况下可能会非常模糊,但是根据这个描述会有任何想法吗?

2 个答案:

答案 0 :(得分:0)

W / o代码都是猜测。但肯定totalCount +=不是线程安全的。您需要原子互锁操作(例如__sync_fetch_and_add)或者您需要使用互斥锁保护它。

答案 1 :(得分:0)

在黑暗中拍摄以获得它的乐趣 - 我发现这个错误的唯一方法是内部行计数器 - 不是totalCount,而是跟踪行数在每个文件中 - 是一个全局变量。每个pthread可能都调用相同的行计数功能,因此当另一个线程更新时,每个文件的行数将被错误地增加。所以我预测totalCount总是大于,不小于实际行数。