- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个有 4 个内核的系统。我的代码可以分成多个部分,每个部分独立工作,但需要大量内存。
是否可以让我的系统在创建新线程之前等待一个线程完成,这样我只有 4 个线程同时运行,同时仍然完全使用我的所有内核?
最佳答案
使用您发布请求的队列。
每个请求对象都有一个封装要执行的工作的执行方法。
您在启动时启动(四个)线程。
线程在无限循环中运行(或直到收到线程必须结束的指示),等待请求出现在队列中并执行它们。
等待可以通过以下方式完成:
...无论如何不要在循环中盲目旋转
您需要一些互斥锁来保护请求队列...因为它是所有线程共享的内存。
编辑:一些有助于理解的伪代码。
a) 在初始化时。
spawn 4 threads (all running mainThread())
b) 在 mainThread() 上
while(main program is running)
poll queue // shared by all threads
retrieve first Request object from queue.
invoke execute method of Request object
sleep some time (10 ms) // or use a condition/signal
end loop
如您所见,该线程不关心其他线程的状态,它只是去接一些工作,执行然后回来做更多事情。
您确保任何时候同时运行的作业不超过 4 个,因为您只有 4 个线程。
c) 你有一个请求类:
class Request {
public:
virtual ~Request() { }
virtual void execute() =0;
};
以及一个或多个子类:
class ThingToDoOfType1: public Request {
public:
void execute() {
// whatever means the "thing to do of type 1"
}
}
再次请求不关心其他请求的状态......如果他们需要关心......那么它会变得稍微困难一些。
d) 最后,您需要在某处将不同类型的请求插入队列中。它们可以被插入....
一个例子可以在初始化中:
spawn 4 threads (all running maintThread())
Insert 1000 Requests of Type1, Type2 and Type 3.
这 1000 个请求将被添加到两个队列中,每当一个线程完成处理前一个请求时,它就会从队列中取出。
关于c++ - 仅当前一个线程完成时才创建一个新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23868201/
嘿。本周的一个教程,其中一个问题要求通过使用其他函数 formatLine 和 formatList 创建一个函数 formatLines,以格式化行列表。 我的代码是这样的; type Line =
我是一名优秀的程序员,十分优秀!