linux 线程问题,linux多线程问题

/*

* 编写程序完成如下功能:

* (1)有一int型全局变量g_Flag初始值为0

* (2)在主线程中创建线程1,打印“this is thread1”,并将g_Flag设置为1

* (3)在主线程中创建线程2,打印“this is thread2”,并将g_Flag设置为2

* (4)线程1需要在线程2退出后才能退出

* (5)主线程在检测到g_Flag从1变为2,或者2变为1的时候退出

*/

#include

#include

#include

#include

int g_Flag = 0;

static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

// 线程1在线程2退出后退出

void print_change1(void *arg) {

printf("this is thread1\n");

// 进入临界区,设置g_Flag

pthread_mutex_lock(&mutex);

if(g_Flag == 2) {

pthread_cond_signal(&cond);

}

g_Flag = 1;

pthread_mutex_unlock(&mutex);

// 等待线程2结束

pthread_join(*(pthread_t *)arg, NULL);

printf("线程1等到线程2结束了!\n");

//printf("thread1 exit\n");

pthread_exit(0);

}

void print_change2(void *arg) {

printf("this is thread2\n");

// 进入临界区,设置g_Flag

pthread_mutex_lock(&mutex);

if(g_Flag == 1) {

pthread_cond_signal(&cond);

}

g_Flag = 2;

pthread_mutex_unlock(&mutex);

printf("thread2 exit\n");

pthread_exit(0);

}

int main() {

int ret;

pthread_t t1, t2;

// 创建线程

ret = pthread_create(&t2, NULL, (void *)print_change2, NULL);

ret = pthread_create(&t1, NULL, (void *)print_change1, &t2);

// 等待条件变量,然后退出

pthread_mutex_lock(&mutex);

pthread_cond_wait(&cond, &mutex);

pthread_mutex_unlock(&mutex);

printf("main exit\n");

exit(0);

}

bVqLgz

为什么“线程1等到线程2结束了!”会打印两次?求解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值