我有一个多线程应用程序,用于检索数据库信息并将数据存储为链接的对象列表,我进一步使用它们对它们执行某些操作并输出结果。在执行过程中,由于指针的性质,我必然会遇到Access Violation等异常。
我当然知道这些异常(硬件或软件)没有被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能够畅通无阻地运行,同时通过某些通知用户访问冲突一种日志或通过控制器线程。
谢谢