2012-02-28 70 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