#include <synch.h> #include <thread.h> int mutex_init(mutex_t *mp, int type, void *arg));
type 可以是以下值之一:
如果进程在持有 USYNC_PROCESS 锁时失败,该锁以后的请求者都将挂起。对于与客户机进程共享锁的系统,此行为会产生问题,因为客户机进程会异常中止。为了避免出现停用进程所持有的锁定挂起的问题,请使用 USYNC_PROCESS_ROBUST 来锁定互斥锁。USYNC_PROCESS_ROBUST 增加了两个功能:
如果进程停用,则系统将解除锁定该进程所持有的全部锁。
请求失败进程所拥有的任何锁的下一个请求者将获取该锁。但是,拥有该锁时会返回一个错误,指明以前的属主在拥有该锁时失败。
互斥锁还可以通过在清零的内存中进行分配来初始化,在这种情况下假定 type 为 USYNC_THREAD。
多个线程决不能同时初始化同一个互斥锁。如果其他线程正在使用互斥锁,则不得将该互斥锁重新初始化。
#include <thread.h> mutex_t mp; int ret; /* to be used within this process only */ ret = mutex_init(&mp, USYNC_THREAD, 0);
#include <thread.h> mutex_t mp; int ret; /* to be used among all processes */ ret = mutex_init(&mp, USYNC_PROCESS, 0);
#include <thread.h> mutex_t mp; int ret; /* to be used among all processes */ ret = mutex_init(&mp, USYNC_PROCESS_ROBUST, 0);