LINUX下信号量的使用
生活随笔
收集整理的這篇文章主要介紹了
LINUX下信号量的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先通過man可以查看Linux下的信號量函數
// Linux信號量API函數 // int sem_init(sem_t *sem, int pshared, unsigned int value); // int sem_destroy(sem_t *sem); // int sem_post(sem_t *sem); // int sem_wait(sem_t *sem); // int sem_trywait(sem_t *sem); // int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout); 有一點需要注意的是abs_timeout是絕對時間不是相對時間下面有一個測試程序,測試了各個函數在調用時的表現
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <iostream> #include <thread> #include <unistd.h> #include <pthread.h> #include <signal.h>#include <semaphore.h>static sem_t sem1; void Test1() {while(true){sem_wait(&sem1);std::cout<<"sem_wait"<<std::endl; } } void Test2() {while(true){int ret = sem_trywait(&sem1);//這里不會阻塞 //ret = 0 獲取成功//ret = EAGAIN 未獲取到if(!ret){std::cout<<"sem_trywait"<<std::endl;}else if(errno == EAGAIN){std::cout<<"errno = EAGAIN"<<std::endl;sleep(1);} else{ sleep(1);}} } void Test3() {while(true){timespec mt = {0};mt.tv_sec = 1;int ret = sem_timedwait(&sem1,&mt);if(!ret){std::cout<<"sem_timedwait"<<std::endl;}sleep(2);} } void Test4() {while(true){sem_wait(&sem1);std::cout<<"Test4"<<std::endl;} } void SemCreat() {while(true){sem_post(&sem1);sleep(10);} } int main(int argc, char *argv[]) {sem_init(&sem1,0,0);std::thread thread1(Test1);std::thread thread2(Test2);std::thread thread3(Test3);std::thread thread4(Test4);std::thread thread5(SemCreat);thread1.join();thread2.join();thread3.join();thread4.join();return 1; }總結
以上是生活随笔為你收集整理的LINUX下信号量的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RCOM串口绘图软件
- 下一篇: Nas性能测试工具-vdbench