关于线程

时间:2012-02-28 05:32:39

标签: c++ multithreading thread-safety pthreads

我遇到了一个有关线程场景的问题。

我的流程中有三个主题。一个是subsystem1线程,第二个是subsystem2线程,第三个是商店经理线程。

subsystem1和subsystem2线程都调用storemanager线程与数据库进行通信。

任何人都可以帮我如何调用storemanager线程方法或如何传递命令从我的sybsystem线程调用存储管理器线程方法,并从商店经理线程中获取响应。

需要指导。我在linux中使用c ++。

2 个答案:

答案 0 :(得分:2)

没有从另一个线程“调用”线程的事情。你的三个线程同时运行并且彼此独立。

您的商店经理线程充当工作线程,为来自其他两个线程的请求提供服务。

当其中一个子系统线程需要发出数据库操作时,它会向存储管理器线程发送某种形式的消息,该线程包含有关需要执行的函数的信息。实现此通信的一种方法是使用线程安全队列。在这种情况下,子系统线程将作业请求添加到作业队列。

存储管理器线程监视作业队列,并在其他线程添加时从队列执行作业请求。完成的作业将从队列中删除。

请注意,当存储管理器线程执行请求的任务时,子系统线程不会阻塞。相反,您必须在线程之间开发一种通信机制,子系统线程可以在作业完成时找到它们,并在必要时获取有关结果的信息。

我建议您阅读线程安全的数据结构和同步原语。

答案 1 :(得分:0)

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);
}