//pthread_mutex_t 互斥量属性//PTHREAD_MUTEX_TIMED_NP,这是缺省值,也就是普通锁。首先进行一次CAS,如果失败则陷入内核态然后挂起线程//PTHREAD_MUTEX_RECURSIVE_NP,可重入锁,允许同一个线程对同一个锁成功获得多次,并通过多次unlock解锁。如果是不同线程请求,则在加锁线程解锁时重新竞争。// PTHREAD_MUTEX_ERRO...
不过,如果这次是控制红灯,下次重入的时候控制的是绿灯,就没有因为重入导致的问题,因为fd是局部变量,这个局部变量在每一次调用都会分配新的内存空间,因为open的是绿灯,之前没有被open过,也不会出现open失败的情况。 所以对于不同的PATH,我们可以用不同的lock来加锁和解锁,不要用全局锁来操作,引发这样的问题。
所以我在一个函数中使用了pthread_mutex_lock,来说明一旦函数使用了锁,就变成了不可重入的函数。 #include <stdlib.h> #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static const...
至于malloc,属于非可重入API。理论上不能被signal handle调用。https://en.wikipedia.org/wiki/Signal_...
有些接口在调用的时候会先设置屏蔽信号,就不会被打断。至于malloc,属于非可重入API。理论上不能被...
Linux中的signal是一种异步处通信机制,信号类型分为可靠信号和非可靠信号两种。所谓非可靠信号是linux继承...