Что касается потоков - PullRequest
       15

Что касается потоков

0 голосов
/ 28 февраля 2012

Я столкнулся с одной проблемой, связанной со сценарием потоков.

В моем процессе три темы. Один из них - поток подсистемы 1, второй - поток подсистемы 2, а третий - поток менеджера магазина.

Поток subsystem1 и subsystem2 вызывает поток storemanager для связи с базой данных.

Кто-нибудь может мне помочь, как вызвать метод потока storemanager или как передать команду, чтобы вызвать метод потока менеджера магазина из потоков моей системы и получить ответ обратно из потока менеджера магазина.

Нужно руководство в этом. Я использую C ++ в Linux.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Нет такой вещи, как "вызов" потока из другого потока.Ваши три потока работают одновременно и независимо друг от друга.

Ваш поток менеджера магазина действует как рабочий поток, который обслуживает запросы от двух других потоков.

Когда одна из подсистемпотоки должны выполнить операцию базы данных, она отправляет некоторую форму сообщения потоку менеджера магазина, который содержит информацию о функции, которая должна быть выполнена.Один из способов реализовать это взаимодействие - это потокобезопасная очередь.Поток подсистемы в этом случае добавит запрос задания в очередь заданий.

Поток менеджера магазина контролирует очередь заданий и выполняет запросы заданий из очереди по мере их добавления другими потоками.Завершенные задания удаляются из очереди.

Обратите внимание, что потоки подсистемы не будут блокироваться, пока поток менеджера хранилища выполняет запрошенную задачу.Вместо этого вам нужно разработать механизм связи между потоками, с помощью которого потоки подсистемы смогут узнать, когда задание завершено, и при необходимости получить информацию о результате.

Я рекомендую вам прочитать данные, ориентированные на многопотоковое исполнение.структуры и примитивы синхронизации.

0 голосов
/ 28 февраля 2012
void *storeManager(void *arg)
{
    printf("\nI am storeManager function\n");
    pthread_exit(NULL);
}

void *subSystem(void *arg)
{
   pthread_t newThread;
   printf("I am subSystem function\n");
   pthread_create(&newThread, NULL, storeManager, NULL);
   pthread_exit(NULL);
}


int main (int argc, char *argv[])
{
   pthread_t threads;
   printf("In main: creating subSystem thread\n");
   pthread_create(&threads, NULL, subSystem, NULL);
   pthread_exit(NULL);
}
...