当一个线程希望执行或打印某些东西时如何挂起其他线程?

时间:2014-02-19 05:58:44

标签: c++ c linux multithreading sockets

我是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



        }
    }

我没有在网上找到任何具体内容,即使是一些示例网址也会有所帮助

5 个答案:

答案 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);

  [...]
}

请注意,为了便于阅读,此代码缺少错误检查。