服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - linux下的C\C++多进程多线程编程实例详解

linux下的C\C++多进程多线程编程实例详解

2022-01-11 16:49nyist327 Linux

这篇文章主要介绍了linux下的C\C++多进程多线程编程实例详解的相关资料,需要的朋友可以参考下

linux下的C\C++多进程多线程编程实例详解

1、多进程编程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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、多线程编程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#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)、互斥

?
1
2
3
4
5
6
7
8
9
10
11
12
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)、条件变量

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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);
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/nyist327/article/details/44958585

延伸 · 阅读

精彩推荐