多进程间将自动共享数据,就是说进程间公用的数据会随任意一个进程发生改变,对此我们进行实验。
1、需要引用的库函数
#include<pthread.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
由于我们将会使用pthread_create函数,请先引入pthread库
2、设计思路
我打算让两个进程都对一个公共值counter循环加1,请注意,在一次加1操作结束前,公共值counter必须只受一个函数影响,可以认为一次循环必须为原子操作,我们使用counter=val;语句锁住counter。
代码如下:
#include<pthread.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/
int counter=0;/*两个线程都能修改的共享变量 */
void *thread1(void *arg)/*第1个线程执行代码*/
{
int i,val;
for(i=1;i<=5;i++)
{
val=++counter;
printf("第1个线程:第%d次循环counter=%d\n",i,counter);/*LINE A*/
sleep(1);/*睡眠或挂起1秒钟*/
counter=val;
}
}
void *thread2(void *arg)/*第2个线程执行代码*/
{
int i,val;
for(i=1;i<=5;i++)
{
val=++counter;
sleep(1);/*睡眠或挂起1秒钟*/
printf("第2个线程:第%d次循环,counter=%d\n\n",i,counter);
counter=val;
}
}
int main(int argc, char *argv[])
{
pthread_t id1,id2;
{ /*创建第1个线程*/
pthread_create(&id1,NULL,thread1, NULL);
/*创建第2个线程*/
pthread_create(&id2,NULL,thread2, NULL);
}
pthread_join(id2,NULL); /*等待第2个线程结束*/
/*打印counter最后的值*/
printf("最后的counter值为%d\n",counter);
exit(0);
}
结果如下: