我的任务是编写一个生产者/消费者程序,其中有多个消费者,每个消费者对应于自己的共享数据结构,而生产者可以访问所有共享数据结构。无论如何,我遇到的问题是用每个使用者线程自己的结构初始化它;这是通过每个线程获得自己的唯一编号来实现的。例如,线程0获得作为参数传入的数字0,线程1获得数字1,等等。但是,我只能通过调用sleep来让每个线程获得其唯一的数字。
struct SharedData {
int isopen;
int refcount; // reference count: number of threads using this object
unsigned int front; // subscript of front of queue
unsigned int count; // number of chars in queue
unsigned int bufsize;
pthread_cond_t buffer_full;
pthread_cond_t buffer_empty;
pthread_mutex_t mtex;
fifo_t* queue;
sem_t empty_count;
sem_t full_count;
sem_t use_queue; // mutual exclusion
};
struct OverSharedData{
struct SharedData ** rep;
int rop;
};
int main(int argc, const char *argv[])
//Other Code
struct OverSharedData* remp = (struct OverSharedData*)malloc(sizeof(struct OverSharedData));
rennit(remp);
struct SharedData * d = *(remp->rep + 0);
//Other Code
for (z=0; z<consumerthreads; z++) {
remp->rop = z;
pthread_create((Consumer_Threads+z), 0, Consumer, remp);
usleep(100);
}
remp->rop是每个线程的不同参数,每个线程包含它的特定编号。如果我像这样注释掉usleep
for (z=0; z<consumerthreads; z++) {
remp->rop = z;
pthread_create((Consumer_Threads+z), 0, Consumer, remp);
}
我得到的是:输入的消费者:2
输入的消费者:2
输入的消费者:2
当我想要时:输入消费者:0输入消费者:1输入消费者:2
消费者代码在这里:
void* Consumer(void *arg){
pthread_mutex_lock(&grill);
struct OverSharedData * de = (struct OverSharedData *)arg;
printf("Entered Consumer: %d\n", de->rop);
int numb = de->rop;
pthread_mutex_unlock(&grill);
//Rest of code not necessary
如何在不使用睡眠调用的情况下初始化这些线程
如果您的结构是全局的,它将在创建Z线程之前得到更新。即,变量remp->rop
将在第一个线程执行之前增加Z次。
react文档中提到了创建react应用程序的官方方法 我认为会自动检测纱线,但在我的情况下,它不会,并使用我不想要的npm创建reactapp。 我使用创建react-app的第二个选项,但它显示了多个警告: 那么有没有更好的方法用npx(使用纱线)创建react应用程序
问题内容: 有什么方法可以创建线程以一次运行多个方法吗? 这样,如果任何方法在所有其他线程之间失败,则应终止。 问题答案: 每个node.js进程在设计上都是单线程的。因此,要获得多个线程,您必须具有多个进程(正如其他一些发帖人所指出的那样,您还可以链接到一些库,这些库使您能够使用Node中的线程,但是没有这些库就没有这种能力。请参阅Shawn Vincent的回答,参考https://githu
我正在考虑从主线程创建、的可能性,而分离的线程创建线程并等待之后再运行下一个线程。 但我不认为这是可能的,因为我总是在第一个线程之后而在下一个线程之前崩溃。 : : 因此,以下是我希望发生的事情: 更新:如何接受这个并将其分解,以便在标头中声明,但在需要的地方执行,然后执行
我正在解决一个生产者/消费者问题,我想创建几个生产者和消费者(几个线程),我有一个问题,我如何才能正确地创建几个线程,使一个任务不由两个线程执行(每个线程执行一个不同的任务)。 代码:我试着做一个循环,就像下面这样: 输出:但它不起作用,因为线程相互重叠
我在很多地方读过,线程池减少了线程创建开销,从而提高了性能。但是一旦线程执行完它的run方法,它就会进入dead/terminated状态,这意味着它可以再次重新启动。 那么,线程池如何处理线程的释放呢?它是否真的以某种方式保存线程以服务下一个任务,或者在每次提交任务时在内部创建新线程?