在没有SIGILL的情况下处理锁定过度自由

时间:2017-01-25 05:37:10

标签: python python-3.x pthreads cython

我正在开发一个包含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

0 个答案:

没有答案