我正在开发一个包含pthread
rwlock
实例的Python / Cython项目,我正在尝试处理错误案例。
我现在的问题是,似乎存在一堆上下文,其中锁可以抛出SIGILL
并且我想返回更好的python错误/不崩溃。
我不得不说,我对unix信号做的并不多,我不知道为什么它首先会这样做。抛出SIGILL的所有调用也都有返回码,对于我来说,只需返回错误代码就更有意义了。现在,我的整个申请都很难中止。
当你没有按照它想要的方式调用它时,是否有一个C rwlock
实现不会爆炸?或者,抓住并处理像SIGILL
正常一样严肃的事情?这样做会产生其他副作用吗?
在回应评论时,这是一个最小的例子:
// For RWLocks
#include <pthread.h>
#include <stdio.h>
int main()
{
int ret;
pthread_rwlock_t lock_rw = PTHREAD_RWLOCK_INITIALIZER;
ret = pthread_rwlock_rdlock(&lock_rw);
printf("pthread_rwlock_rdlock: %i\n", ret);
ret = pthread_rwlock_unlock(&lock_rw);
printf("pthread_rwlock_unlock: %i\n", ret);
ret = pthread_rwlock_unlock(&lock_rw);
printf("pthread_rwlock_unlock: %i\n", ret);
return 0;
}
这会创建一个普通的锁,获取一个读锁,释放读锁,然后再次释放读锁(过度自由)。
控制台输出:
$ rm a.out; gcc wat.c -lpthread; ./a.out
pthread_rwlock_rdlock: 0
pthread_rwlock_unlock: 0
Illegal instruction