我有一个API(用C
编写),允许任意数量的传入(并发)连接。每当客户端连接到API时,每个连接都由创建的独立pthread
处理。
这些连接中的每一个都可以(但不必)更改服务器的属性,以便不应同时处理请求。
我的代码基本上遵循以下结构:
pthread_mutex_t lock;
void request_handler(char * request)
{
pthread_mutex_lock(&lock);
process_request(request);
pthread_mutex_unlock(&lock);
}
现在假设正在处理一个需要很长时间(例如十秒)的请求。在这段时间内,有五个其他请求进入,因此有五个附加 pthreads
将在pthread_mutex_lock
函数中达到。
我之所以这样问是因为这是我所期望的,但我没有找到官方文档中有多个并发线程的示例。
我的代码需要严格按顺序执行而不是,但我想事先知道为了正确设计我的代码会发生什么。
我还读到了递归mutex
,但由于种种原因,我想避免使用它们。此外,我的代码不会尝试通过构造从单个pthread
多次锁定。
答案 0 :(得分:2)
互斥锁确保一次只有一个线程进入代码的关键部分,在您的情况下,一次调用process_request()
。一旦线程t
获得锁定,任何后续线程都必须等到t
释放它。
如果多个这样的线程到达,谁有机会先行取决于操作系统对线程的调度,这不是确定性的,并且每次运行程序时都可能不同。但是,保证每次只能传递一个线程。