サーバーおよびクライアントと TCP ソケットを介して通信するプログラムがあります。
他のことに加えて、クライアントからの保留中の要求を含むバッファーがあり、メインスレッドによってバッファーに配置されている要求を出力するスレッドも 1 つあります。
したがって、たとえば、3 つのファイルを印刷するための 3 つの要求があり、printer_thread は 3 つのファイルを次々に印刷する必要があります。これを行うために、印刷するファイルを取得する関数「get」と、ファイルをバッファに入れる関数「put」があります。バッファの何かを取得すると、かなりうまく機能し、ファイルの印刷も機能します。
問題は、クライアントがバッファ内に印刷するファイルの数を知りたい場合に発生します。バッファに物を入れるたびにインクリメントし、何かを取得するたびにデクリメントする、簡単なカウンターが必要です。
私のプログラムは変数をインクリメントするだけで、デクリメントはしません。
int count = 0;
struct prodcons buffer;
/* some other code that is not important for now and works well */
void main_thread(int port_number){
/* more code */
put(&buffer, f_open);
count++; ------> it increment every time that I do a put
nw = myWriteSocket(sc, "File has been Queued.", ARGVMAX);
/* more code */
void *printing(void *arg){
/* variables and other code that works */
file_desc = get(&buffer);
count--; ---> now it never decrement, but the get is working because the files are printed
int main (int argc, char *argv[]) {
/* more code */
pthread_create(&printer_thread,NULL,printing, (void *)terminal);
main_thread(port_number);
何が問題になる可能性がありますか? get が機能し、すべてが機能し、count が機能しないのはなぜですか?
質問がうまく構成されていない場合は申し訳ありません。