多线程的顺序执行(信号量,POXIS标准)

Posted 每天告诉自己要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程的顺序执行(信号量,POXIS标准)相关的知识,希望对你有一定的参考价值。

c++ 11 提供了基础的 多线程同步语句,也就是: 互斥锁,条件变量,异步,原子锁

信号量机制是LInux POXIS 中的标准的。这个需要注意。

方法1(c),信号量

这个是.c文件,如果是.cpp,因为类型转换更加严格,所以需要改一下。

//使用信号量实现多线程的顺序执行
#include <stdio.h>
#include <semaphore.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

sem_t sem_a, sem_b, sem_c;

void *fun_a() 
    while (1) 
        sem_wait(&sem_a);
        printf("A");
        sem_post(&sem_b);
    


void *fun_b() 
    while (1) 
        sem_wait(&sem_b);
        printf("B");
        sem_post(&sem_c);
    


void *fun_c() 
    while (1) 
        sem_wait(&sem_c);
        printf("C\\n");
        sem_post(&sem_a);
    



int main() 
    sem_init(&sem_a, 0, 1);
    sem_init(&sem_b, 0, 0);
    sem_init(&sem_c, 0, 0);

    pthread_t thread_a, thread_b, thread_c;

    pthread_create(&thread_a, NULL, fun_a, NULL);
    pthread_create(&thread_b, NULL, fun_b, NULL);
    pthread_create(&thread_c, NULL, fun_c, NULL);

    while (1);
    return 0;

方法1(cpp)

//使用信号量实现多线程的顺序执行
#include <stdio.h>
#include <semaphore.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

sem_t sem_a, sem_b, sem_c;

static void *fun_a(void*) 
    while (1) 
        sem_wait(&sem_a);
        printf("A");
        sem_post(&sem_b);
    


static void *fun_b(void*) 
    while (1) 
        sem_wait(&sem_b);
        printf("B");
        sem_post(&sem_c);
    


static void *fun_c(void*) 
    while (1) 
        sem_wait(&sem_c);
        printf("C\\n");
        sem_post(&sem_a);
    



int main() 
    sem_init(&sem_a, 0, 1);
    sem_init(&sem_b, 0, 0);
    sem_init(&sem_c, 0, 0);

    pthread_t thread_a, thread_b, thread_c;

    pthread_create(&thread_a, NULL, fun_a, NULL);
    pthread_create(&thread_b, NULL, fun_b, NULL);
    pthread_create(&thread_c, NULL, fun_c, NULL);

    while (1);
    return 0;


以上是关于多线程的顺序执行(信号量,POXIS标准)的主要内容,如果未能解决你的问题,请参考以下文章

java多线程笔记--顺序执行

MFC中如何让多线程按先后顺序执行,第一个来的先执行,以后按先后到达的顺序执行

多线程的顺序执行

多线程的顺序执行

为啥并行多线程代码执行比顺序慢?

并发编程-内存模型