我遇到了一个有关线程场景的问题。
我的流程中有三个主题。一个是subsystem1线程,第二个是subsystem2线程,第三个是商店经理线程。
subsystem1和subsystem2线程都调用storemanager线程与数据库进行通信。
任何人都可以帮我如何调用storemanager线程方法或如何传递命令从我的sybsystem线程调用存储管理器线程方法,并从商店经理线程中获取响应。
需要指导。我在linux中使用c ++。
答案 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);
}