2012-02-28 90 views
0

我正面临有关线程场景的一个问题。关于线程

我在我的过程中有三个线程。一个是子系统1线程,第二个是子系统2线程,第三个是商店管理器线程。

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

任何人都可以帮助我如何调用storemanager线程方法或如何通过命令从我的sybsystem线程调用store manager线程方法并从store manager线程获取响应。

需要在这方面的指导。我在linux中使用C++。

+1

你基本上是如何从另一个线程(子系统)调用线程(storeManager)的问题吗? – noMAD 2012-02-28 05:41:16

+0

是的......我需要从其他线程调用storemanager线程中的方法。假设在storemanager线程中有一个叫做“Write”的方法。其他线程将调用此写入并传递参数并获得返回响应。我需要这种行为。 – Muthu 2012-02-28 05:44:06

+0

添加标签c或C++,您将获得更多答案。 – noMAD 2012-02-28 06:10:04

回答

2

有没有从另一个线程“调用”一个线程的东西。你的三个线程在同一时间独立运行。

您的店铺经理线程充当为其他两个线程提供服务的工作线程。

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

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

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

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

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

在这里你正在创建新的线程。但假设两个线程已经在运行,那么如何从另一个线程调用一个线程的方法来分配任务? – Muthu 2012-02-28 05:56:18

+0

您只能创建一个线程并为其分配一个方法。当一个线程已经运行时,你不能像普通的方法那样简单地调用它。 POSIX API有一个'pthread_create'函数来创建一个线程并为其分配一个方法。如果你想分配一个新的方法或同一个到另一个线程,你需要创建一个新的线程。我希望你明白我的意思。 – noMAD 2012-02-28 06:06:17

+0

但我仍然不明白你的意思。如果你有一个单独的方法'write()',那么你可以在任何线程内部或外部调用它(只要确保它们不输入竞争条件)。如果你有一个'void * write(void * arg)'方法,那么我知道调用它的唯一方法是'pthread_create()' – noMAD 2012-02-28 06:14:23