簡體   English   中英

使用System V的共享內存IPC的Posix線程

[英]Posix Threads for shared memory IPC using System V

我正在編寫一個客戶端和服務器程序,以演示客戶端和服務器進程之間的IPC。 例如,客戶端線程可以將數據發送到服務器(在這種情況下,使用System V共享內存段完成)。 用於創建共享內存段的選擇是:System v和posix共享內存命令)。

到目前為止,在我們創建的設置中,客戶端僅向服務器發送一個請求,服務器將計算出的值返回給客戶端。 但是,我想模擬來自客戶端的多個請求的創建,因此想產生多個線程,每個線程創建一個共享的內存段,服務器可以訪問並存儲該值。

談到主要問題,快速搜索如何在linux環境鏈接中使用線程(Ubuntu 16.04內核:4.13.0-36-generic)表明我們可以將pthreads用於相同的線程。 使用pthreads(代表POSIX線程)是否會以任何方式影響內存段的使用? 我應該注意哪些不兼容性?

編輯:問題不在於如何設計這樣的系統,而是要更多地了解啟動內存段的線程安全性。 兩段的描述是為了給這個問題一些背景。

您必須注意不要在此處將進程內通信(IPC)與進程間通信混淆。 SysV和Posix共享內存指的是前者(進程之間的通信),Posix線程處理后者(進程中使用多個線程的通信/同步)。

也就是說,假設您的客戶端和服務器是單獨的進程 (而不是進程中的線程),則為服務器使用posix線程能夠一次處理多個請求是合理的,但是使用IPC來傳遞客戶端和服務器之間來回請求和響應。

在不了解有關您的問題的更多詳細信息的情況下,處理此問題的第一方法是創建一個線程池,其中每個線程負責從單個客戶端進行處理 單個服務器線程可能負責服務所有客戶端請求,將它們卸載到各個工作線程中進行處理 ,然后再檢索答案以發送回客戶端。 這種方法可以很好地將IPC工作與多線程處理分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM