• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

linux下多线程一次等待多个信号量

franki 2017-03-03 浏览量:2135

linux下多线程(非进程)编程中,一次等待多个信号量怎么解决?

并且等到信号量来了后,能判断是那一个

功能如同window下waitformultipleobjects()函数,一次就可以等待多个信号量。


在linux下多线程编程,linux 下sem_wait()一次只能等待一个信号量。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
其他答案 数量:4
  • 方法1:
    使用sem_init()、sem_post()、sem_wait()、sem_trywait()與sem_destroy()
    和sem_init()+1信號量
    與sem_wait()-1信號量、sem_trywait()嘗試-1信號量
    與多Thread交互,就可達到

    方法2:
    使用SystemV的sys/sem.h
    struct semid_ds {
    
    struct ipc_perm sem_perm; /* 信號量集的操作許可權限 */
    
    struct sem *sem_base; /* 某個信號量sem結構數組的指針,當前信號量集
    
    中的每個信號量對應其中一個數組元素 */
    
    ushort sem_nsems; /* sem_base 數組的個數 */
    
    time_t sem_otime; /* 最後一次成功修改信號量數組的時間 */
    
    time_t sem_ctime; /* 成功創建時間 */
    
    };
    
    struct sem {
    
    ushort semval; /* 信號量的當前值 */
    
    short sempid; /* 最後一次返回該信號量的進程ID 號 */
    
    ushort semncnt; /* 等待semval大於當前值的進程個數 */
    
    ushort semzcnt; /* 等待semval變成0的進程個數 */
    
    };
    可得知Process id,要注意的是Linux中Thread和Process沒有分別
    
    • 发布于2017-03-04
    • 举报
    • 评论 0
    • 1
    • 0

  • sem_wait()等待信号量的值,如果信号量的值大于0则执行减一,否则就等待信号量增加。
    • 发布于2017-03-03
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果是要解决多个线程之间的通讯,为什么不用udp在localhost上互相传?这样很容易管理各个线程的运行。
    • 发布于2017-03-03
    • 举报
    • 评论 0
    • 0
    • 0

  •  sem_wait(&sem_w);
    sem_init(&sem_w, 0, 1); //保护一个资源,资源初始化成可用
    sem_init(&sem_r, 0, 0);//保护一个资源,资源初始化成不可用
    sem_wait(&sem_r);
    sem_t sem_w, sem_r;
    需要用多个信号量,就定义多个
    • 发布于2017-03-03
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

linux下多线程一次等待多个信号量