pthread上的CPU使用率很高

时间:2017-09-22 15:45:58

标签: c++ multithreading process pthreads

我有一个简单的Application,它通过TCP Socket接收消息并处理相同的消息和Perform Some Actions。

我已经使用std :: queue'来存储消息并在线程上处理它们。

应用程序运行正常,没有崩溃。但是,几分钟后应用程序消耗大量的CPU。

这是我的插入消息和进程消息(线程)代码

我的简单队列和线程变量

std::queue<std::string> in_data_queue;
pthread_mutex_t in_data_queue_lock=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t in_data_queue_condition=PTHREAD_COND_INITIALIZER;

处理队列代码

void *processMessage(void *attr) {
    while (true) {
        try {
            if (pthread_mutex_trylock(&in_data_queue_lock) == 0) {
                if (!in_data_queue.empty()) {
                    std::string data = in_data_queue.front();
                    in_data_queue.pop();
                    pthread_cond_signal(&in_data_queue_condition);
                    pthread_mutex_unlock(&in_data_queue_lock);
                    // do some action ;
                } else {
                    pthread_cond_wait(&in_data_queue_condition,
                        &in_data_queue_lock);
                    pthread_mutex_unlock(&in_data_queue_lock);
                }
            }
        } catch (std::exception &e) {
            cout << e.what() << endl;
        }
        cout << "processMessage" << endl;
    }
    pthread_exit(NULL);
}

用于在队列中插入消息的代码

void pushMessage(std::string rData) {
   pthread_mutex_lock(&in_data_queue_lock);
   in_data_queue.push(rData);
   pthread_cond_signal(&in_data_queue_condition);
   pthread_mutex_unlock(&in_data_queue_lock);
}

任何身体帮助我解决线程的错误。这是一个很好的实现或在这个线程上的任何问题。请帮帮我..

0 个答案:

没有答案