1、多进程编程
- #include <stdlib.h>
- #include <sys/types.h>
- #include <unistd.h>
- int main()
- {
- pid_t child_pid;
- /* 创建一个子进程 */
- child_pid = fork();
- if(child_pid == 0)
- {
- printf("child pid\n");
- exit(0);
- }
- else
- {
- printf("father pid\n");
- sleep(60);
- }
- return 0;
- }
2、多线程编程
- #include <stdio.h>
- #include <pthread.h>
- struct char_print_params
- {
- char character;
- int count;
- };
- void *char_print(void *parameters)
- {
- struct char_print_params *p = (struct char_print_params *)parameters;
- int i;
- for(i = 0; i < p->count; i++)
- {
- fputc(p->character,stderr);
- }
- return NULL;
- }
- int main()
- {
- pthread_t thread1_id;
- pthread_t thread2_id;
- struct char_print_params thread1_args;
- struct char_print_params thread2_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);
- return 0;
- }
3、线程同步与互斥
1)、互斥
- pthread_mutex_t mutex;
- pthread_mutex_init(&mutex, NULL);
- /*也可以用下面的方式初始化*/
- pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_lock(&mutex);
- /* 互斥 */
- thread_flag = value;
- pthread_mutex_unlock(&mutex);
2)、条件变量
- int thread_flag = 0;
- pthread_mutex_t mutex;
- pthread_cond_t thread_flag_cv;\
- void init_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();
- }
- return NULL;
- }
- void set_thread_flag(int flag_value)
- {
- pthread_mutex_lock(&mutex);
- thread_flag = flag_value;
- pthread_cond_signal(&thread_flag_cv);
- pthread_mutex_unlock(&mutex);
- }