C++ 关于线程

C++ 关于线程,c++,multithreading,thread-safety,pthreads,C++,Multithreading,Thread Safety,Pthreads,关于线程场景,我面临一个问题 我的进程中有三个线程。一个是子系统1线程,第二个是子系统2线程,第三个是存储管理器线程 子系统1和子系统2线程都调用storemanager线程与数据库进行通信 有谁能帮助我如何调用storemanager线程方法,或者如何传递命令从我的sybsystem线程调用store manager线程方法,并从store manager线程获取响应 我们需要这方面的指导。我在Linux中使用C++。< /P> < P>没有从另一个线程调用“线程”的事情。您的三个线程同时独立

关于线程场景,我面临一个问题

我的进程中有三个线程。一个是子系统1线程,第二个是子系统2线程,第三个是存储管理器线程

子系统1和子系统2线程都调用storemanager线程与数据库进行通信

有谁能帮助我如何调用storemanager线程方法,或者如何传递命令从我的sybsystem线程调用store manager线程方法,并从store manager线程获取响应

我们需要这方面的指导。我在Linux中使用C++。< /P> < P>没有从另一个线程调用“线程”的事情。您的三个线程同时独立运行

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);
}
您的store manager线程充当工作线程,为来自其他两个线程的请求提供服务

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

store manager线程监视作业队列,并在其他线程添加作业请求时执行队列中的作业请求。已完成的作业将从队列中删除

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


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

您是否基本上对如何从另一个线程(子系统)调用线程(storeManager)有疑问?是的……我需要从其他线程调用storeManager线程中的方法。假设storemanager线程中有一个名为“Write”的方法。其他线程将调用这个write和pass参数并获得返回响应。我需要这种类型的行为。添加标记C或C++,你会得到更多的答案。@游牧:不要添加标签只是为了得到更多的答案。标记用于总结问题中的字段,而不是吸引注意。可能吧?在这里,您正在创建新的线程。但假设两个线程已经在运行,那么如何从另一个线程调用一个线程的方法来分配任务呢?您只能创建一个线程并为其分配一个方法。当线程已经在运行时,不能像普通方法那样简单地调用它。POSIXAPI有一个
pthread\u create
函数来创建线程并为其分配方法。如果要将新方法或相同方法分配给另一个线程,则需要创建一个新线程。我希望你明白我的意思,但我还是不明白你的意思。如果您有一个单独的方法
write()
,那么您可以在任意数量的线程内部或外部调用它(只需确保它们不进入竞争条件)。如果您有一个方法
void*write(void*arg)
,那么我知道调用它的唯一方法就是
pthread\u create()
他可能在寻找信号或条件机制?根据等待子系统命令时另一个线程是否会阻塞,或者在信号或条件机制中…@Platinum:in,您不能将参数传递给目标线程。您只能发出继续或不继续的信号。