【发布时间】:2018-08-30 22:12:38
【问题描述】:
我正在尝试创建一个计算从 1 到 1000 的素数的程序。我相信代码在创建或加入 pthread 时遇到了问题。我不断收到核心转储错误。我主要关心的是我加入 pthread 的第二个 for 循环。这是检查线程是否已结束的正确方法吗?
我在终端中使用 gcc --std=c99 -Wall -Werror -pthread primes.c -o primes。
while (test_val <= FINAL){
//loop to check if thread is finished
for(int i = 0; i < THREADS; i++){
if(tid[i] == 0){
pthread_create(&tid[i], NULL, testprime, NULL);
}
}
//wait for thread to end
for(int i = 0; i < THREADS; i++){
pthread_join(tid[i], NULL);
这是错误: 分段错误(核心转储)
【问题讨论】:
-
你为什么要用
1覆盖线程ID:tid[l] = 1;??? -
您还在临界区之外阅读
test_val。当isprime设置为false 时,你应该打破循环。 -
当数字不是素数时,你也应该打印一些东西。这有助于调试...
标签: c linux multithreading operating-system