1

ブースト スレッド、ミューテックス、および条件変数を使用するコードをいくつか見つけましたが、このコードを posix スレッドで書き直してみたいと思います。

これはBoostコードです。私はここで見つけました:

void push(Data const& data)
{
    boost::mutex::scoped_lock lock(the_mutex);
    the_queue.push(data);
    lock.unlock();
    the_condition_variable.notify_one();
}

pthreads を使用する私のコードでは、条件変数を正しい方法で使用しているかどうかわかりません。

void push(T const& data)
{
    pthread_mutex_lock(&m_mutex);
    m_queue.push(data);
    pthread_mutex_unlock(&m_mutex);
    pthread_cond_signal(&m_condition);
}

初期化はその直前に行われます:

pthread_mutex_t m_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t m_condition = PTHREAD_COND_INITIALIZER;

別の時点で彼らは使用していthe_condition_variable.wait(lock);ます...この行は、次のようにpthreadsで書き直します:pthread_cond_wait( &m_condition, &m_mutex);

私は正しい軌道に乗っていますか?

4

1 に答える 1