linux多线程为什么只执行一次

zyu00 2019-01-07 04:40:24
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int flag = 1;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *fun1()
{
while(flag)
{
pthread_mutex_lock(&mutex);
printf("fun1\n");
pthread_mutex_unlock(&mutex);
usleep(2);
}
}

void *fun2()
{
while(flag)
{
pthread_mutex_lock(&mutex);
printf("fun2\n");
pthread_mutex_unlock(&mutex);
usleep(2);
}
}

int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,(void*)fun1,NULL);
pthread_create(&t2,NULL,(void*)fun2,NULL);
usleep(20);
flag = 0;
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}

结果只打印了一次fun1和一次fun2
...全文
262 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2019-01-07
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
int flag = 1;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *fun1(void *param)
{
while(flag)
{
pthread_mutex_lock(&mutex);
printf("fun1\n");
pthread_mutex_unlock(&mutex);
usleep(2);
}
}

void *fun2(void *param)
{
while(flag)
{
pthread_mutex_lock(&mutex);
printf("fun2\n");
pthread_mutex_unlock(&mutex);
usleep(2);
}
}

int main()
{
pthread_t t1,t2;
pthread_create(&t1,NULL,fun1,NULL);
pthread_create(&t2,NULL,fun2,NULL);
usleep(20);
flag = 0;
pthread_join(t1,NULL);
pthread_join(t2,NULL);
return 0;
}

在Linux下你的程序编译不通过,以上是修改之后的可以编译通过的代码;

之所以只执行一次,是因为usleep(20);时间太短。因为一个printf打印就基本上消耗远大于20us了。所以,只打印一次是正常的。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧