Practice2.多线程

实验任务

使用Pthreads库创建多个线程,并观察线程的并发执行现象以及数据共享关系
Monte Carlo技术计算Π值(多线程):
Π = 4 * (圆内点数)/ (总的点数)

image

1.随机的生成一个点Random(x,y),
2.如果这个点在圆内,就用一个变量把它记下来circle_point++
3.如果落在了外边的正方形内部的,也用一个变量记下来square_point++,(square_point就是总的点数)
4.当点越来越多时,就计算Π = (落在圆内部的 ➗ 总的点数量) x 4,点越多越逼近真实的Π的圆周率的值
5.实验题目中的圆的半径是1,原点是0

image
image

当把pthread_join(tid,NULL); 这行代码注释过后,
image

再重新编译执行得到如下结果:
只有In Main thread,
image

如果不是的话就先让ThreadFunc先睡眠3s
image

出现这种情况的原因是:
因为缺少pthread_join(tid,NULL); 导致main函数中的主线程并没有等待新创建的tid线程结束,就直接return了。就如同孤儿进程一样,主线程结束后,在它里面创建的线程自然而然地就不存在了。
image

将pthread_join放在printf("In main thread\n");之后,打印顺序会不同
image

image

多线程并发执行

image

image

image

image

image
Shared data section belongs to process(这个数据段是共享的
,是属于进程的,当前进程的所有线程都可以共享)
image

给主线程也添加上value
image

image

完成实验任务
image

image

image

posted @ 2023-02-09 23:01  nullptrException  阅读(9)  评论(0编辑  收藏  举报