mutex /condwaitクラスのこの単純なラッパーに問題があります。接続されたクライアントのキューを保護し、待機状態のスレッドに新しいクライアントが接続されていることを通知するために使用しますが、アプリケーションがクラッシュし、セグメンテーションが失敗しました。
client_socket_fd = clients_for_threads_q.front();
ストレステスト中のみ(多くのクライアントが接続されている場合)
スレッドで待ちます:
MUTEXCONDSIGNAL_for_workers.lock();
if ( clients_for_threads_q.empty() )
{
MUTEXCONDSIGNAL_for_workers.wait_signal();
}
client_socket_fd = clients_for_threads_q.front(); // CRASHED !!!!
clients_for_threads_q.pop();
MUTEXCONDSIGNAL_for_workers.unlock();
もちろん、clients_for_threads_qは書き込みに影響を受けます
MUTEXCONDSIGNAL_for_workers.lock();
clients_for_threads_q.push (client_socket_fd);
MUTEXCONDSIGNAL_for_workers.send_signal();
MUTEXCONDSIGNAL_for_workers.unlock();