C程序中的Linux POSIX在取消线程中失败

时间:2012-06-04 02:19:54

标签: c linux pthreads posix cancellation

我正在编写一个程序,它在不同的线程中读取部分数据,然后在其中找到一个模式。

但在此之前(问题出现在下面的代码中)我只想检查线程是否正确取消。那就是我被困住的地方。查看错误需要时间,但基本上在启动程序之后(有时是40次),它会在主线程的while循环中挂起

while (alive_threads) { //never ends, because alive_threads==1, but pthread_cleanup_pop should make sure that all canceling threads reduces counter and as a result reduce it to 0
 usleep(1000);
}

...等待最后一个线程取消。

代码在这里:http://pastebin.com/VqRrhXPD

我还提供了我正在阅读的文件内容。

开放:

./a.out 20 test.txt 40 clean

20 -number of threads

40 -portion of data

1 个答案:

答案 0 :(得分:3)

您正在修改全局变量alive_threads而没有任何内存同步。这会调用未定义的行为;很有可能,它会导致一些减量丢失。