linux下的C\C++多进程多线程编程实例详解
linux下的C\C++多进程多线程编程实例详解
1、多进程编程
#include#include #include intmain() { pid_tchild_pid; /*创建一个子进程*/ child_pid=fork(); if(child_pid==0) { printf("childpid\n"); exit(0); } else { printf("fatherpid\n"); sleep(60); } return0; }
2、多线程编程
#include#include structchar_print_params { charcharacter; intcount; }; void*char_print(void*parameters) { structchar_print_params*p=(structchar_print_params*)parameters; inti; for(i=0;i count;i++) { fputc(p->character,stderr); } returnNULL; } intmain() { pthread_tthread1_id; pthread_tthread2_id; structchar_print_paramsthread1_args; structchar_print_paramsthread2_args; thread1_args.character='x'; thread1_args.count=3000; pthread_create(&thread1_id,NULL,&char_print,&thread1_args); thread2_args.character='o'; thread2_args.count=2000; pthread_create(&thread2_id,NULL,&char_print,&thread2_args); pthread_join(thread1_id,NULL); pthread_join(thread2_id,NULL); return0; }
3、线程同步与互斥
1)、互斥
pthread_mutex_tmutex; pthread_mutex_init(&mutex,NULL); /*也可以用下面的方式初始化*/ pthread_mutex_tmutex=PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); /*互斥*/ thread_flag=value; pthread_mutex_unlock(&mutex);
2)、条件变量
intthread_flag=0; pthread_mutex_tmutex; pthread_cond_tthread_flag_cv;\ voidinit_flag() { pthread_mutex_init(&mutex,NULL); pthread_cond_init(&thread_flag_cv,NULL); thread_flag=0; } void*thread_function(void*thread_flag) { while(1) { pthread_mutex_lock(&mutex); while(thread_flag!=0) { pthread_cond_wait(&thread_flag_cv,&mutex); } pthread_mutex_unlock(&mutex); do_work(); } returnNULL; } voidset_thread_flag(intflag_value) { pthread_mutex_lock(&mutex); thread_flag=flag_value; pthread_cond_signal(&thread_flag_cv); pthread_mutex_unlock(&mutex); }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!