I m trying to implement a program that has a producer and N (N >= 1) workers. They communicate using a message queue. The idea is that the producer sends to the queue "tasks". The workers do a msgrcv() call to get a task and execute some code. After the worker accomplish the task it sends to the queue the result of the computation. The producer will get this message and save the results.
I m 采用POSIX电线,生产商和工人同时工作。
The problem behind this program is that exists a scenario that compromises the communication. Each message has a size of ~5000 bytes. The maximum queue size is ~16000 bytes in UNIX Systems, which is the case.
The scenario is: There are 3 tasks in the queue (5000*3 = 15000 bytes). Some worker get one message from the queue (now the queue has 10000 bytes). The worker starts executing the task and, due to the amount of bytes that a worker has to process in each task, the producer sends to the queue another message (the queue is now full). Now after the task is complete the worker tries to send the result to the queue and becomes blocked (the queue is full). The producer tries to send another task to the queue and becomes blocked too.
如果我只与一名工人共同实施这一方案,这种设想很可能发生。
是否有人想避免这种情况?