Mono里运行C#脚本4—mono_mutex_t 锁的实现
一、结论:
递归锁:同一个线程在不解锁的情况下,可以多次获取锁定同一个递归锁,而且不会产生死锁;
非递归锁:在不解锁的情况下,当同一个线程多次获取同一个递归锁时,会产生死锁。
二、典型应用:
windows下的互斥量和临界区(关键段)是递归锁;
linux下的互斥量pthread_mutex_t是非递归锁,但是可以通过在创建互斥量时设置PTHREAD_MUTEX_RECURSIVE属性,将pthread_mutex_t设置为递归锁。
mono锁结构声明:
typedef struct mono_mutex_t {
union {
CRITICAL_SECTION critical_section; //递归锁
SRWLOCK srwlock; //非递归锁
};
gboolean recursive; //是否支持递归操作
} mono_mutex_t;
linux下的定义:
typedef pthread_mutex_t mono_mutex_t;
typedef pthread_cond_t mono_cond_t;
pthread_mutex_t 是 POSIX 线程(Pthreads)