我有一个等待客户端连接的应用程序。每次客户端连接时,都会创建一个新帧(使用新的套接字文件描述符)。我知道有多少客户端将连接,在我达到这个数字后,我只需在 for 循环中运行 pthread_join。
我的问题是我希望主线程控制所有其他线程。我的目标是让每个线程同时向客户端发送相同的消息,并且只发送一次。一个线程可以发送多条消息。
我目前的想法是定义一个命令列表,如下:
char *commands[] = {
(char*) "TERMINATE\0",
.... };
然后指定一个命令编号,该编号表示要在该 char* 数组中使用的命令。所有线程都会做类似的事情
write(sockfd, buffer[commandNumber], length[commandNumber]);
我考虑过等待条件变量,但我发现了两个问题:
1)我想确保每个线程虽然同步,但只执行一次命令。
2)启动命令的主线程必须知道所有这些线程何时完成执行命令。
我看到执行 2) 的唯一方法是跟踪计数器(使用互斥锁),当每个线程执行命令时,它可以增加该计数器。我不确定我能否避免线程两次运行该命令。
请协调多个线程一次执行单个操作的最佳方法是什么?并且还能够知道该动作何时完成每个线程的执行吗?