競合状態の問題に直面していると思いますが、よくわかりません。以下は私のコードです。
while(1)
{
int newsocket_fd; = accept(socket_fd,(struct sockaddr *) &client_addr, &client_len);
if (newsocket_fd < 0)
{
perror("Error on accept");
}
else
{
pthread_create( &threadNewClient, NULL, NewClient, (void *)&newsocket_fd);
}
}
スレッド引数としてint変数(newsocket_fd)のアドレスを送っています。
void* NewClient(void * thread_args)
{
int client_socket = *(int*)thread_args;
char buffer[256];
int n;
stringstream userInput,responseString;
printf(KBLU "Client conneted %d\n",client_socket);
}
ここでは、スレッド引数を受け取り、それを型キャストしています。その値を出力 (または使用) すると、ほとんどの場合、前のスレッド (同じスレッド関数) に送信される値が返されます。ネットで検索したところ、競合状態が原因であると誰かが示唆しています。
引数としてアドレスの代わりに値を送信すると、正常に動作します。異なる値を持つ同じアドレスにアクセスしていますが、競合状態になる可能性があります。
前もって感謝します。
@編集: int newsocket_fd を作成しました。内部 while ループ。