在我的main()
函数中,我调用pthread_create
来创建一个新线程。我将文本文件的名称传递给它,线程打开文本文件,计算行数,然后将该数字返回main()
,我将整数totalCount +=
设置为回。
我知道线程函数正常工作,因为我用另一段代码计算了文本文件中的行数。当我使用循环多次调用pthread_create
时会出现问题。我计算一个文件时得到的totalCount
是准确的,但是当我打开两个或更多文件时,totalCount
中的main()
是错误的。
我的程序可能会出现什么问题?这是我的线程函数中的问题吗?我的pthread_join
?我知道这个问题在没有代码的情况下可能会非常模糊,但是根据这个描述会有任何想法吗?
答案 0 :(得分:0)
totalCount +=
不是线程安全的。您需要原子互锁操作(例如__sync_fetch_and_add
)或者您需要使用互斥锁保护它。
答案 1 :(得分:0)
在黑暗中拍摄以获得它的乐趣 - 我发现这个错误的唯一方法是内部行计数器 - 不是totalCount
,而是跟踪行数在每个文件中 - 是一个全局变量。每个pthread可能都调用相同的行计数功能,因此当另一个线程更新时,每个文件的行数将被错误地增加。所以我预测totalCount
总是大于,不小于实际行数。