また、マスターソリューションは良い選択だと思います。
/* Process struct */
typedef struct _process_t {
unsigned long process_id;
struct _process_t *next; /* next process */
struct _process_t *prev; /* previous process */
struct _process_master *master_process; /* Master process */
int (*accepting_socket) (struct _process_t *); /* process accepet function */
char *received_data_buffer; /* the data received over the socket */
} process_t;
/* List of process */
typedef struct _process_list {
process_t *head;
process_t *tail;
int count;
} process_list;
/* The master process */
typedef struct _process_master {
process_list socket_listners; /* All the process listening */
process_list ready_listners; /* Process ready to listen and receive*/
..... /* Complete this struct */
} process_master;
プロセスを使用したソリューションが遅い場合は、代わりに使用できますthreads
(同じメモリを共有します)が、コードが複雑になり、バグの追跡が困難になる可能性があります。
2番目のソリューションは、ミューテックスの取得とすべてのプロセス間のコンテキスト切り替えのコストのため、最初のソリューションよりも高速ではありません。