в следующих фрагментах кода, мне нужно защитить connfd, потому что он может часто меняться в вызове accept()
.Стратегия выбора места блокировки мьютекса и разблокировки в многопоточной программе
void *deal_conn(void *arg){
int connfd;
connfd = *((int*)arg);
....
}
for(;;){
connfd = accept(...);
pthread_create(&thread, NULL, deal_conn, &connfd);
}
Я в недоумении, где можно заблокировать и разблокировать мьютексы для этой переменной. Может ли кто-нибудь дать мне несколько идей? спасибо!
connfd передается как указатель - на время действия функции deal_conn это значение может быть изменено. Рассмотрите возможность использования mt-безопасного вызова malloc, чтобы создать отдельную безопасную копию connfd для перехода к функции deal_conn. deal_conn затем может освободить эту переменную. –
Что удерживает вас от блокировки непосредственно перед вызовом 'accept()' и разблокировкой после присвоения дескриптора сокета переменной, связанной с функцией потока? – alk