首页主机资讯Linux系统中C++如何使用信号量

Linux系统中C++如何使用信号量

时间2025-10-23 20:32:04发布访客分类主机资讯浏览498
导读:在Linux系统中,C++可以使用POSIX信号量(semaphore)来实现进程间或线程间的同步。POSIX信号量是一种计数器,用于控制多个进程或线程对共享资源的访问。以下是如何在C++中使用POSIX信号量的基本步骤: 包含头文件:...

在Linux系统中,C++可以使用POSIX信号量(semaphore)来实现进程间或线程间的同步。POSIX信号量是一种计数器,用于控制多个进程或线程对共享资源的访问。以下是如何在C++中使用POSIX信号量的基本步骤:

  1. 包含头文件:
#include <
    semaphore.h>
    
#include <
    fcntl.h>
    
#include <
    unistd.h>
    
#include <
    iostream>
    
  1. 初始化信号量:
sem_t semaphore;
    
sem_init(&
    semaphore, 0, 1);
     // 第一个参数是信号量的指针,第二个参数是信号量的属性(0表示进程共享,1表示线程共享),第三个参数是初始值
  1. 使用信号量:
sem_wait(&
    semaphore);
     // 等待信号量,如果信号量的值大于0,则将其减1并继续执行;如果信号量的值为0,则阻塞等待
// 访问共享资源
sem_post(&
    semaphore);
     // 将信号量的值加1,唤醒等待的进程或线程
  1. 销毁信号量:
sem_destroy(&
    semaphore);
    

下面是一个简单的示例,演示了如何使用信号量来同步两个线程对共享资源的访问:

#include <
    semaphore.h>
    
#include <
    pthread.h>
    
#include <
    iostream>
    

sem_t semaphore;
    
int shared_resource = 0;


void* thread_func(void* arg) {
    
    for (int i = 0;
     i <
     100000;
 ++i) {
    
        sem_wait(&
    semaphore);
    
        ++shared_resource;
    
        sem_post(&
    semaphore);

    }
    
    return nullptr;

}


int main() {
    
    sem_init(&
    semaphore, 0, 1);
    

    pthread_t thread1, thread2;
    
    pthread_create(&
    thread1, nullptr, thread_func, nullptr);
    
    pthread_create(&
    thread2, nullptr, thread_func, nullptr);
    

    pthread_join(thread1, nullptr);
    
    pthread_join(thread2, nullptr);
    

    std::cout <
    <
     "Shared resource value: " <
    <
     shared_resource <
    <
     std::endl;
    

    sem_destroy(&
    semaphore);
    
    return 0;

}
    

在这个示例中,我们创建了两个线程,它们都访问共享资源shared_resource。通过使用信号量,我们确保了在任何时候只有一个线程可以访问共享资源。最后,我们销毁信号量并输出共享资源的值。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux系统中C++如何使用信号量
本文地址: https://pptw.com/jishu/733793.html
C++在Linux上如何实现定时任务 Debian Golang打包最佳实践是什么

游客 回复需填写必要信息