所以,我需要一些C中多线程的帮助.我想让我的多个线程用800以下的随机数调用函数usleep.但是,根据我的理解,rand_r必须在每个线程中以不同的整数播种.
My confusion源于这样一个事实:如果我想为每个线程使用不同的整数rand_r,那么我该怎么做呢?如果我不能创建随机整数,我怎样才能为每个线程使用不同的(即随机)整数?
static unsigned int consumerseed = 1;
static unsigned int producerseed = 54321;
//producer thread:
void *producer(void *param) {
buffer_item rand;
while (1) {
//sleep for a random period of time:
int producersleeptime = rand_r(&producerseed)%500+100;
usleep(producersleeptime);
//produce an item:
//wait on both semaphores
//attempt to insert into buffer
//signal both semaphores
}
}
//consumer thread:
void *consumer(void *param) {
buffer_item rand;
while (1) {
//sleep for a random period of time:
int consumersleeptime = rand_r(&consumerseed)%600+200;
usleep(consumersleeptime);
//wait on both semaphores
//attempt to remove an item from buffer
//signal both semaphores
}
}
我将在程序顶部定义的静态整数producerseed和consumerseed作为全局变量.我是这样做的,因为我认为对rand_r的调用需要访问一个静态的,不变的内存位置.
这是正确的方法吗?或者我是否需要为每个线程使用不同的整数.这会导致我的线程中出现任何竞争条件吗?生成的随机数怎么样 – 每次都会有所不同?
编辑1:好的,所以这个问题的答案基本上是不正确的.每个线程都需要一个唯一的种子整数.这可以来自,例如,time()或p_thread_self()id.我仍然对如何准确实现这一点感到困惑,但我将继续努力并报告.现在我决定使用p_thread_self作为每个线程的种子.
非常感谢您花时间寻找/回答.