- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中有 4 个线程。一个是主线程,另外 3 个是工作线程。我希望这 3 个工作线程中的前 2 个生成数据,第 3 个在生成数据时写入数据。数据生成器线程应该是同步的,它们并行运行(同时开始“for”循环的每次迭代)。如果 CPU 足够快,写入线程应该一直在写入。我不知道如何在 C++ 中专业地同步所有这 3 个线程,所以我编写的代码就像有“__syncthreads()
”函数一样,以尽我所能表达我的意思。传统 C++ 中是否有 CUDA C '__syncthreads()
' 的等价物?如果不是那么如何以我想要的方式最佳地实现同步? (我不喜欢代码中的那些 while
循环。它们只会不必要地提高 CPU 利用率)
volatile bool write_flag ;
int main(int argc, char **argv)
{
...
write_flag = false ; // nothing to write at the beginning
...
HANDLE *trdHandles = new HANDLE[WORKING_THREADS] ;
int IDs[] = {0, 1} ; // IDs for generator threads
trdHandles[0] = CreateThread(NULL, 0, generator, &IDs[0], 0, NULL) ; // 1st data generator thread
if(trdHandles[0] == NULL)
ExitProcess(0) ;
trdHandles[1] = CreateThread(NULL, 0, generator, &IDs[1], 0, NULL) ; // 2nd data generator thread
if(trdHandles[1] == NULL)
ExitProcess(0) ;
trdHandles[2] = CreateThread(NULL, 0, writer, f_out, 0, NULL) ; // writer thread
if(trdHandles[2] == NULL)
ExitProcess(0) ;
...
}
WINAPI DWORD generator(LPVOID lpParam)
{
int *ID = static_cast<int*>(lpParam) ;
dataGen(*ID) ;
return 0 ;
}
void dataGen(int id)
{
...
for(int aa = 0; aa < cycles; aa++)
{
__syncthreads() ;
... // both threads generate data here in parallel
while(write_flag) // don't generate data too fast. Wait for writes to complete (this flag is initially set to 'false')
;
setBuffers(id, aa) ; // for swapping in/out buffers
if(id == 0) // only one thread needs to set the flag
write_flag = true ;
}
}
WINAPI DWORD writer(LPVOID lpParam)
{
ofstream *f_out = static_cast<ofstream*>(lpParam) ;
while(1)
{
if(write_flag)
{
f_out->write(out_buffer0, chunk_len) ;
f_out->write(out_buffer1, chunk_len) ;
write_flag = false ;
if(!finish)
continue ;
else
return 0 ;
}
}
}
最佳答案
按照 The Little Book Of Semaphores 的第 3.5 节所述寻找屏障模式的实现。 .
正如您所描述的,屏障模式用于同步线程。
关于c++ - NVIDA 的 CUDA '__syncthreads()' 在传统 C++ 中的等价物是什么。如何专业地同步线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19608507/
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我需要创建一个 API,允许我客户的开发人员使用将作为库发布的专有 C 模块(想想 .lib 或 .so - - 不是来源)。 我想让 header 尽可能对开发人员友好(所以我不需要这样做),遵循最
所以我想制作一个加载了全部功能的免费应用程序。在应用程序检测到许可的专业版 key 之前,专业版功能将被禁用。当然,我想让专业 key 使用 LVL 检查它的许可证。虽然到目前为止我知道如何做正确的事
我想就最小/样板专业 PHP 团队开发环境获得普遍共识。我无法在网络上的任何地方找到此信息。在开源世界中,有如此多的选择和如此多的做事方式,但我还没有找到任何适用于基础设施/管道方面的通用最佳实践。
希望我的问题不会太宽泛。因此,我尝试构建我的问题,以免对 this question 的问题得到太相似的答案。 . 目前我已经在 Linode 上部署了我的 rails 应用程序。服务很好,价格合理。
只是一般查询。我试图研究用于专业 360 开发的工具和环境,但 NDA 未涵盖的可用工具和环境并不多。 (请注意,我对 XNA 开发不感兴趣。) 问:PRO 开发的首选/最常见的开发环境是什么?是 V
我收到了 Rob Bovey 写的《Professional Excel Development》一书,它让我大开眼界。 我正在通过错误处理重新调整我的代码。然而,还有很多我不明白的地方。我特别需要知
IDE:Delphi 6 Professional。 我们有大项目。 我无法使用项目组来构建所有这些,因为我在执行此操作时遇到了 OM 错误和奇怪的文件错误。 我的想法是使用 DCC32.exe之前我
Microsoft网站具有冲突的信息: http://msdn.microsoft.com/en-us/library/ms182372.aspx ...使用Visual Studio Premium
所以我刚刚开始从头开始构建一个网站。我以前从未这样做过。我正在服务器上工作。 1。问题: 在我的文件index.php 中,我有以下内容: 效果很好,显示了 Start.html 的内容。在 htm
例如,在javascript中:1 var name = ""; alert("The name is: " + name); 或者2 alert("The name is: "); 在 ht
我是一名优秀的程序员,十分优秀!