主要是就是对pthread_mutex_lock的使用。列出主要代码:
添加一个任务的代码如下:
PthreadCall("lock", pthread_mutex_lock(&mu_));
if (queue_.empty()) {
PthreadCall("signal", pthread_cond_signal(&bgsignal_));
}
queue_.push_back(BGItem());
queue_.back().function = function;
queue_.back().arg = arg;
PthreadCall("unlock", pthread_mutex_unlock(&mu_));
执行任务的代码如下:
while (true) {
PthreadCall("lock", pthread_mutex_lock(&mu_));
while (queue_.empty()) {
PthreadCall("wait", pthread_cond_wait(&bgsignal_, &mu_));
}
void (*function)(void*) = queue_.front().function;
void* arg = queue_.front().arg;
queue_.pop_front();
PthreadCall("unlock", pthread_mutex_unlock(&mu_));
(*function)(arg);
}
以后需要写后台多线程执行默写任务,就可以利用这些代码了。