64,646
社区成员
发帖
与我相关
我的任务
分享
recvThread(){
while(true){
ret = handle.recv(&data);
if(ret == -1){
reconnet();
sleep(1);
continue;
}
dataProc(data);
}
}
sendThread(){
while(true){
data = someProc();
ret = handle.send(data);
if(ret == -1){
reconnet();
sleep(1);
continue;
}
}
}
reconnet(){
//启动独立的线程运行reconnThread
startThread(reconnThread);
}
reconnThread(){
reconnect(&handle);
}
线程函数伪代码如下
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
//std::mutex _mu;
recvThread(){
while(true){
pthread_mutex_lock(&mutex)
//std::unique_lock<std::mutex> guard(_mu);
ret = handle.recv(&data);
pthread_mutex_unlock(&mutex);
//guard.ulock();
if(ret == -1){
reconnet();
sleep(1);
continue;
}
dataProc(data);
}
}
sendThread(){
while(true){
data = someProc();
pthread_mutex_lock(&mutex)
//std::unique_lock<std::mutex> guard(_mu);
ret = handle.send(data);
pthread_mutex_unlock(&mutex);
//guard.ulock();
if(ret == -1){
reconnet();
sleep(1);
continue;
}
}
}
reconnet(){
//启动独立的线程运行reconnThread
startThread(reconnThread);
}
reconnThread(){
pthread_mutex_lock(&mutex)
//std::unique_lock<std::mutex> guard(_mu);
reconnect(&handle);
pthread_mutex_unlock(&mutex);
//guard.ulock();
}
1.请用自然语言描述上述代码有怎样的同步互斥问题。
2.请用对上述代码进行修改,解决同步互斥问题。
1、连接句柄handle是全局变量,多线程共享同一个变量会引起资源争抢和冲突。
2、红色代码