我计划增强我对并行和并发编程的了解。有人能帮我找出一些在线学习资源吗?
谢谢,
发布于 2010-01-08 12:35:41
如果您使用的是基于POSIX的系统(Linux、FreeBSD、Mac等),则需要查看pthreads(教程链接)。Pthread已经存在很长一段时间了,并且是基于POSIX的平台上并发编程的事实标准。
不过,还有一个新来者,称为Grand Central Dispatch(教程链接)。这项技术是由Apple(在Snow Leopard中)开发的,试图解决一些与pthread和多线程编程相关的繁琐问题。具体地说:
类型定义f struct { int val1;int val2;} context;int main(){ int firstval = 5;int secondval = 2;context *c = malloc(sizeof(context));c->val1 = firstval;c->val2 = secondval;create_new_thread(context,myFunct);} void myFunct(context *c){ printf(“人为的示例%d%d”,c->val1,c->val2);}
这涉及到很多工作-我们必须创建上下文,设置值,并确保我们的函数正确处理接收上下文。但GCD并非如此。我们可以改为编写以下代码:
int main(){
int firstval = 5;
int secondval = 2;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
printf("Contrived example %d %d", firstval, secondval);
});
}注意这是多么的简单!没有上下文,甚至没有单独的函数。
排入队列
而且我只触及了GCD所能做的表面。这真是一项令人惊叹的技术,我强烈建议你去看看docs。它目前可以在Mac和FreeBSD上使用,而且它是开源的-所以如果你想让它在Linux上运行,你可以移植它:)。
如果你正在寻找数据并行应用程序的原始能力,苹果公司开发了另一项名为OpenCL的伟大技术(也是为雪豹开发的),它允许你用一种非常简单的C语言(它几乎完全是C语言,但有一些警告)来利用GPU的能力。我对此没有太多的经验,但从我所听到的一切来看,它很容易使用,而且非常强大。OpenCL是一个open standard,在Mac和Windows上都有实现。
所以,总结一下:用于所有基于POSIX系统的pthread(它很难看,但它是事实上的标准),用于Mac和FreeBSD的GCD,以及用于需要所有功能的数据并行应用程序的OpenCL!
发布于 2010-01-08 12:04:13
看看“实践中的并发性”。一本标准的书
发布于 2010-01-08 12:39:13
Herb Sutter写了许多关于这个主题的好文章。His site可能是一个很好的起点。
https://stackoverflow.com/questions/2025411
复制相似问题