Tag: 并发

c ++中的消费者/生产者

这是一个经典的c / p问题,其中一些线程产生数据而另一些线​​程读取数据。 生产者和消费者都共享一个const大小的缓冲区。 如果缓冲区为空,则消费者必须等待,如果它已满,则生产者必须等待。 我正在使用信号量来跟踪完整或空闲的队列。 生产者将减少信号量,增加价值和增加填充的信号量信号量。 所以我试图实现一个从生成器函数中获取一些数字的程序,然后打印出数字的平均值。 通过将其视为生产者 – 消费者问题,我试图节省一些时间来执行程序。 generateNumber函数导致进程有一些延迟,所以我想创建一些生成数字的线程,并将它们放入队列中。 然后运行main函数的“主线程”必须从队列中读取并找到总和然后平均。 所以这就是我到目前为止所拥有的: #include #include #include #include “Thread.h” #include int generateNumber() { int delayms = rand() / (float) RAND_MAX * 400.f + 200; int result = rand() / (float) RAND_MAX * 20; struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = delayms * 1000000; nanosleep(&ts, […]

UNIX便携式primefaces操作

在C中是否有(POSIX-)可移植方式用于primefaces变量操作,类似于使用pthread的可移植线程? primefaces操作是像“递增和获取”这样的操作,它们以primefaces方式执行,这意味着没有上下文切换可以干扰操作。 在Linux内核空间中,我们必须使用atomic_t类型,在Java中我们有java.util.concurrent.atomic包。 在Linux上,atomic.h文件提供primefaces操作,但include是平台相关的,例如#include ,它在Mac OS X上不能以类似的方式提供。

使用CAS以primefaces方式递增两个整数

显然,可以使用比较和交换指令以primefaces方式递增两个整数。 这个谈话声称存在这样的算法,但它没有详细说明它的样子。 如何才能做到这一点? (注意,一个接一个地递增整数的明显解决方案不是primefaces的。另外,将多个整数填充到一个机器字中并不算数,因为它会限制可能的范围。)