如何处理线程函数中的重复代码?

How to deal with duplicate code inside a thread function?

下面的函数是由生产者线程 运行 实现的。此函数包含重复代码。

如果它是一个无线程程序,我会为重复代码创建一个单独的函数,并根据需要使用所需参数调用该函数。

线程函数内部出现重复代码怎么办?

//  This function is run by the `Producer` threads.
void *producerThreadFunction (void *arg) {
    Q_UNUSED (arg);

    while (1) {
        pthread_t tId = pthread_self(); qDebug () << "\nProducer: " << tId;

        if (sharedQueueA.length () < 10) {
            qDebug () << "\nQueue A, First check by Producer: " << tId;
            pthread_mutex_lock (&mutexVariable);

            if (sharedQueueA.length () < 10) {
                sharedQueueA.push_back (1);
                qDebug () << "\nPushed by Producer " << tId << ": " << "Length of queue A is: " << sharedQueueA.length ();
            }
            else {
                qDebug () << "\nProducer " << tId << " has no work to do since queue is full, and is now in waiting mode. Length of queue A is: " << sharedQueueA.length ();
                pthread_cond_wait (&conditionVariable, &mutexVariable);
            }

            pthread_mutex_unlock (&mutexVariable);
        }
        else if (sharedQueueB.length () < 10)
        {
            qDebug () << "\nQueue B, First check by Producer: " << tId;
            pthread_mutex_lock (&mutexVariable);

            if (sharedQueueB.length () < 10) {
                sharedQueueB.push_back (1);
                qDebug () << "\nPushed by Producer " << tId << ": " << "Length of queue is: " << sharedQueueB.length ();
            }
            else {
                qDebug () << "\nProducer " << tId << " has no work to do since quque is full, and is now in waiting mode. Length of queue B is: " << sharedQueueB.length ();
                pthread_cond_wait (&conditionVariable, &mutexVariable);
            }

            pthread_mutex_unlock (&mutexVariable);
        }
        else
        {
            qDebug () << "Producer: " << tId << "Both the queues are full. Have to wait!";
        }
    }

    return NULL;
}

线程回调函数没有什么特别的,只是要考虑线程安全。您可以从线程内部调用任何函数,前提是该函数是线程安全的。

所以只需创建一个函数并将重复的代码移到那里。