我有一个程序运行一些pthreads,并在每个线程中有一个connect(),recv()和send().问题是,有时它会突然关闭显示消息的整个程序"User defined signal 1".它在Linux中使用POSIX线程在C中运行.代码是这样的:
pthread_mutex_t cur_lock;
int stop = 0;
void SocketsFunction(){
//..
connect();
while(recv()<0)
{
//do stuff
send();
}
close();
return NULL;
}
void job()
{
//..
while (!stop)
{
if (something)
//..
else
{
stop = 1;
break;
}
pthread_mutex_unlock(&cur_lock);
SocketsFunction();
pthread_mutex_lock(&cur_lock);
}
pthread_mutex_unlock(&cur_lock);
return NULL;
}
main(){
//..
pthread_mutex_init(&cur_lock, NULL);
//..
for(i = 0; i < 30; ++i)
pthread_create(&pID, NULL, job, NULL);
//..
}
Run Code Online (Sandbox Code Playgroud)
有些东西正在向SIGUSR1您的进程发送"用户定义的信号1"(我相信),此信号的默认操作是终止该进程.如果你想避免你需要停止发送信号的任何东西,安装信号的信号处理程序,或者阻止所有线程中的信号(例如在创建任何线程之前的main开头)pthread_sigmask.
由于您在问题中包含的代码与信号处理或发送信号的内容无关,因此我无法更具体.