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