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



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

但在此之前(问题出现在下面的代码中)我只想检查线程是否正确取消。这就是我被困住的地方。看到错误需要时间,但基本上在(有时 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

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

相关内容

  • 没有找到相关文章

最新更新