我使用gcc编译这个c程序,它只依赖于2个创建的线程,一个用于递增计数器,第二个读取计数器并从计数器中减去一个随机(0-9)值,并且然后显示计数器的值,使用信号量访问它。在编辑的过程中,我还面临很多问题。未定义的引用sem_init / sem_wait / sem_post / pthread_create / .. etc'虽然我在程序中将它们与标题相关联,但我不知道为什么。
我正在使用' gcc -o prog prog.c'来编译我的程序。
#include<semaphore.h>
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int counter=0;
int run=1;
sem_t mutex;
void * increm();
void * decrem();
void main()
{ sem_t mutex;
sem_init(&mutex,0,1);
pthread_t t1,t2;
pthread_create(&t1,NULL,increm,NULL);
pthread_create(&t2,NULL,decrem,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
sem_destroy(&mutex);
}
void * increm()
{ while(run)
{sem_wait(&mutex);
counter++;
sem_post(&mutex);
}
pthread_exit(NULL);
}
void * decrem()
{ int i=25;
while(i>0)
{sem_wait(&mutex);
counter-=(rand()%10);
printf("Counter value : %d \n",counter);
i--;
sem_post(&mutex);
}
run=0;
pthread_exit(NULL);
}
答案 0 :(得分:1)
[...]编辑后,我面对很多&#39;未定义的引用 sem_init / sem_wait / sem_post /在pthread_create / ..等等&#39;我不知道为什么 虽然我在程序中将它们与标题相关联。
我正在使用&#39; gcc -o prog prog.c&#39;来编译我的程序。
使用GCC时,您应该在编译时以及链接使用pthreads函数的程序时将-pthread
选项传递给gcc
:
gcc -pthread -o prog prog.c
至少,这将导致所需的库(-ies)包含在链接中,但原则上,它可能会对某些版本的GCC和某些平台上的代码生成产生影响。
另请参阅Significance of -pthread flag when compiling,Difference between -pthread and -lpthread while compiling和其他许多内容。