我正在做一个程序,其中用户输入了票数和卖家数 . 我有一个线程数组,线程数等于卖家数 . 我必须通过对所有线程使用卖出功能来“卖”票 . 我必须使用计数信号量来查看我剩下的票数和每个线程销售的票数 .

输出看起来像卖家#1卖了一个(49左)卖家#0卖了一个(48左)卖家#1卖了一个(47左)卖家#1卖了一个(46左)卖家#1卖了一个(45)左)卖家#1卖了一个(44左)卖家#1卖了一个(左边43个)卖家#2卖了一个(左边42个)..依此类推

我无法找到哪个卖家(线程)是哪个以及如何正确地执行信号量 . 有什么建议?

到目前为止,我有这个

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>

sem_t sem1;

void *sell(void* ticks){
    int num_tickets = *(int*)ticks; //how many tickets each seller sold
    int i;
    int tickets_sold;
    printf("The total number of tickets are: %d\n", num_tickets);
    for(i = 0; num_tickets > 0; i++){

        sem_post(&sem1);
        num_tickets = num_tickets - 1;
        sem_wait(&sem1);


        tickets_sold++;
        printf("Seller sold (%d)\n", tickets_sold);
    }

    return NULL;
}



int main(int argc, char *argv[]){

    if (argc != 3){
        fprintf(stderr, "usage: a.out<integer value>\n");
        return -1;
    }

    if (atoi(argv[1]) < 0){
        fprintf(stderr,"Argument %d must be non-negative\n", atoi(argv[1]));
        return -1;
    }

    if (atoi(argv[2]) < 0){
        fprintf(stderr,"Argument %d must be non-negative\n", atoi(argv[1]));
        return -1;
    }

    else{

        int total_ticks= atoi(argv[1]);
        int num_sellers = atoi(argv[2]);
        int i;
        sem_init(&sem1, 0, total_ticks);


        pthread_t threads[num_sellers]; 

        for(i = 0; i < num_sellers; i++){

            pthread_create(&threads[i], NULL, sell, (void*) &total_ticks);
        }


    pthread_exit(0);
    return 0;

    }
}