我是C(LINUX)
中多线程的新手我正在执行 multiple client server(single)
计划,此处我正在使用 threads
执行服务器,因此我需要客户端时等待回复其他线程(其他服务器线程)不应该运行,
while(n = read(conn->sock, buffer, sizeof(buffer)) > 0 )
{
//HERE I NEED THE LOCK THE OTHER THREADS FROM THEIR EXECUTION
//process
//process
//end of process
//HERE I NEED TO RELEASE LOCK FOR THE OTHER THREADS EXECUTION
}
}
我没有在网上找到任何具体内容,即使是一些示例网址也会有所帮助
答案 0 :(得分:2)
为此您可以使用例如condition variables,您可以notify all waiting threads。
答案 1 :(得分:2)
如果需要纯C,可以使用POSIX pthreads中的条件变量。 https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables
答案 2 :(得分:1)
您应该使用互斥(互斥)。如果您使用的是Windows,我会在关键部分对象上使用EnterCriticalSection。
您还可以使用已在C ++ 11中添加的std::mutex
来尝试为此类事物创建标准化技术。
基本上你有一个线程需要传输或访问所有权'所有权'在执行操作以查看互斥锁是否已拥有之前,互斥锁和所有其他线程将检查。如果拥有互斥锁,则其他线程将等待它被释放,从而等待轮到他们采取行动。
强烈建议使用操作系统内置方法来执行此操作,就像我对Windows的建议一样。如果你不这样做,你将没有相同的公平程度。大多数操作系统都内置了优化功能,而STL对象可能 。
编辑: 我有些错过了Linux标签,但是AlexBG提供了以互斥锁用法构建的POSIX链接:https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables
答案 3 :(得分:1)
搜索线程同步 全局变量将由线程共享,因此使用全局变量然后可以使用该变量获取锁。
答案 4 :(得分:0)
为了保护对共享资源的并发访问,可以使用简单(快速)的互斥锁。
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
[...]
void some_func(void)
{
[...]
pthread_mutex_lock(&mutex);
/* Access to shared resource here (print to stdout for example). */
pthread_mutex_unlock(&mutex);
[...]
}
请注意,为了便于阅读,此代码缺少错误检查。