我最近开始使用线程,所以这个东西很新。请不要讨厌.i正在研究一个计算素数的程序,直到通过命令行提供的极限N.
我将这个N分配给num_threads,即4 .lets表示数字是40,num_threads = 4然后每个线程应该得到10个索引。我创建了一个包含每个thread的上限和下限的结构。我传递了一个指针这种结构并使用了" high"和"低"这个结构的属性来控制流程。
似乎存在某种问题。如果你们中的任何人都可以指出错误或者告诉我这是否是正确的事情我将非常感激:)
geany发出以下错误:
g++ -Wall -o "prime5000" "prime5000.cpp" (in directory: /home/jarrar/operating systems/threads)
/tmp/ccAHGsIw.o: In function `main':
prime5000.cpp:(.text+0xc9): undefined reference to `pthread_create'
prime5000.cpp:(.text+0xf6): undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
Compilation failed.
如果使用以下命令从终端执行:
g++ prime5000.cpp -lpthread -o 5prime
./5prime
它会给出:
分段错误(核心转储)
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#define num_thread 4
void* calc(void* param);
struct fml
{
long low;
long high;
};
fml* x;
int main(int argc,char* argv[])
{
pthread_t threadArray[num_thread];
int thread;
for(thread=0;thread<num_thread;thread++)
{
x->low=thread*atoi(argv[1])/num_thread;
x->high=x->low+(thread+1)*atoi(argv[1])/num_thread;
pthread_create(&threadArray[thread],NULL,calc,&x);
}
int i;
for(i=0;i<num_thread;i++)
{
pthread_join(threadArray[i],NULL);
}
return 0;
}
void* calc(void* param)
{
fml* temp=(fml*)param;
long lowerLimit=temp->low;
long upperLimit=temp->high;
int i;
int j;
for(i=lowerLimit;i<upperLimit;i++)
{
for(j=2;j<i;j++)
{ if(i!=1||i!=0)
{
if(!(i%j==0))
{
printf("%d ",i);
}
}
}
}
pthread_exit(NULL);
}
答案 0 :(得分:0)
尝试-lpthread以及-pthread之后问题仍然存在,并且还尝试传递类的对象而不是指针,但遗憾的是同样的问题。分段错误(核心转储)不提供大量信息