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);
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!