pthread_mutex_lock引起的core

遇到一个奇怪的core

core在pthread_mutex_lock下一行

最后发现:

某个线程pthread_mutex_lock的时候,另一个线程已经pthread_mutex_destroy掉这个锁

转载于:https://my.oschina.net/zipu888/blog/549563

#include<stdio.h> #include<unistd.h> #include<pthread.h> #include<stdlib.h> #include <time.h> #define random_1(a,b) ((rand()%(b-a))+a) //随机值将含a不含b pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int value = 0; long double valid=0,all=999999;//初始化有效点为0,总点数为999999 long double pi=0; void* fun(void* arg) { pthread_mutex_lock(&mutex); long double x,y;//定义坐标x,y int i=1; srand((double)time(NULL)); //设置随机数种子,防止每次产生的随机数相同 for(i=1;i<=999999;i++) { //获取x,y的随机值,0<=x<100000,0<=y<100000 x=random_1(0,100000); y=random_1(0,100000); if(x*x+y*y<=10000000000) valid++; } pthread_mutex_unlock(&mutex); return (void*)0; } //主函数 int main() { clock_t start, end; start = clock(); //读取程序开始运行的时间 pthread_t theradId1, threadId2;//定义两个子线程 int error;//定义线程返回值error,若是成功建立线程返回0,否则返回错误的编号 pthread_mutex_init(&mutex, NULL);//互斥锁初始化 error = pthread_create(&theradId1, NULL, fun, NULL); sleep(2);//用sleep()控制子线程的不同并发过程 if(error) { printf("Thread1 creat failed!\n"); exit(1); } error = pthread_create(&threadId2, NULL, fun, NULL); if(error) { printf("Thread2 creat failed!\n"); exit(1); } end = clock(); //记录结束时间 pi=valid/999999*4; printf("valid的值为: %Lf\n",valid); printf("总的点数的值为999999\n"); printf("π的值为: %Lf\n",pi); double seconds =(double)(end - start)/CLOCKS_PER_SEC*1000; printf("Use time is: %.3fms\n", seconds); //进程锁销毁 pthread_mutex_destroy(&mutex); return 0; } 对你编的程序,请回答以下问题:在你的机器上,创建多少个线程比较合适?为什么?需设计实验并获取实验数据,以验证你的答案。
03-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值