0

我有一个多线程应用程序,用于检索数据库信息并将数据存储为对象的链接列表,我进一步使用这些对象对它们进行一些操作并输出结果。在执行过程中,由于指针的性质,我必然会遇到访问冲突等异常。

我当然知道这些异常(硬件或软件)不会被 C++ 中的常规 try catch 捕获,并且也知道我们已经通过重新编程罪魁祸首部分来避免此类异常。但是因为我无法控制数据库中的数据,有时我最终会得到异常和整个程序崩溃。

我想知道是否有办法通知用户访问冲突并防止受影响的线程使其他线程或整个进程崩溃。

int ex;
pthread_mutex_t lk;

void sighandler(int a){
    pthread_mutex_unlock(&lk);
}

static void *func1(void * arg) {
            while(1) {
        pthread_mutex_lock(&lk);
        if(ex<=0) {
            try {
                    char *p=0;*p = 0;  
                } catch(...) {
                    printf("eerr");
            }
            pthread_mutex_unlock(&lk);
            break;
        }
        ex--;
        pthread_mutex_unlock(&lk);
    }
    return 0;
}

static void *func2(void * arg) {
    while(1) {
            pthread_mutex_lock(&lk);
            if(ex<=-100) {
                    pthread_mutex_unlock(&lk);
                    break;
            }
            ex-=2;
            pthread_mutex_unlock(&lk);
    }
    return 0;
}



int main(void)
{
        signal(SIGSEGV,sighandler);
        ex=100;
    pthread_t pth[2];
    pthread_mutex_init(&lk,NULL);
    pthread_create(&pth[0],NULL,func1,NULL);
    pthread_create(&pth[1],NULL,func2,NULL);

    pthread_join(pth[0],NULL);
        pthread_join(pth[1],NULL);
    return 0;
} 

我试图创建我想知道的更简单的版本.. func1 (*p=0) 中肯定存在访问冲突,但我希望 func2 在通过某种日志通知用户访问冲突时不受阻碍地运行或通过控制器线程。

谢谢你

4

0 回答 0