程序功能:
A线程进行从1到100的累加,累加结果放在全局变量C中。
B线程根据A的实时运算结果,检测到累加值可以 被10整除时马上输出此时的C值。
程序思路:
设置一个全局变量F ,县城B通过检测F的值来判断是否输出当前C值,线程A通过检测F的值来判断是否继续累加,达到线程同步的效果。
在AB线程分别判断F值的语句前后加上P操作和V操作,也就是加锁和释放锁,来达到线程互斥。
程序代码:
#include<pthread.h> #include<stdio.h> int c=0; int f=0; pthread_mutex_t t; void f1(void *arg) { int i=1; while(i<=40) { pthread_mutex_lock(&t); if(f==0) { c+=i; i++; printf("%d \n",c); if(c%10==0) { f=1; } } pthread_mutex_unlock(&t); } } void f2(void *arg) { while(1) { if(f==1) { pthread_mutex_lock(&t); f=0; printf("-------%d \n",c); pthread_mutex_unlock(&t); } } } int main() { pthread_t a; pthread_t b; pthread_mutex_init(&t,NULL); pthread_create(&a,NULL,f1,NULL); pthread_create(&b,NULL,f2,NULL); pthread_join(a,0); pthread_join(b,0); }