首页 > 代码库 > 跟我一起做面试题-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 <stdio.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#include <errno.h>int g_flag = 0;pthread_cond_t cond_self_kill;pthread_mutex_t m_kill;pthread_mutex_t m_flag;void *thread_child(void *arg){ if(pthread_mutex_lock(&m_flag)!= 0) { pthread_exit(NULL); } g_flag =(int)arg; printf("this is thread%d\n", (int)arg); if(pthread_mutex_unlock(&m_flag)!= 0) { pthread_exit(NULL); } if((int)arg == 1) { if(pthread_cond_wait(&cond_self_kill, &m_kill) != 0) { pthread_exit(NULL); } printf("thread%d exit\n", (int)arg); } else { sleep(2); pthread_cond_broadcast(&cond_self_kill); printf("thread%d exit\n", (int)arg); } pthread_exit(NULL); }int main(int argc, char *argv[]){ pthread_t child[2]; int ret; pthread_cond_init(&cond_self_kill, NULL); pthread_mutex_init(&m_flag, NULL); pthread_mutex_init(&m_kill, NULL); ret = pthread_create(&child[1], NULL, thread_child, (void*)2); if(ret) { return 1; } ret = pthread_create(&child[0], NULL, thread_child, (void*)1); if(ret) { return 1; } if(pthread_join(child[0], NULL) != 0) { pthread_join(child[1], NULL); return 1; } pthread_join(child[1], NULL); printf("main thread exit\n"); return 0;}
跟我一起做面试题-linux线程编程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。