2.2.2 线程
GASNet支持客户端使用线程操作且适用于多线程执行。默认情况下,GASNet为各支持网络构建了三个库函数的变体以支持不同客户端线程模型。其中一些名称为“seq” “parsync”和“par”的关键字对应于库文件名和预处理器标记GASNET_SEQ、GASNET_PARSYNC和GASNET_PAR。当其包含gasnet.h及其链接的库文件时,上述三个关键字中的一个必须由客户端定义且与相应的预处理器标记对应。这三个模型如下:
- GASNET_SEQ
该模式允许客户端在每个进程中使用单线程调用GASNet,且不限制客户端使用的进程数,但必须使用其中一个线程调用全部GASNet。 - GASNET_PARSYNC
该模式最多允许一个线程并发调用GASNet。多线程调用GASNet时可能会引起互斥。而GASNet没有提供这种互斥的机制,因此需要客户端处理。 - GASNET_PAR
这是最常用的模式,支持多个客户端线程并发调用GASNet。
在使用SEQ或PARSYNC模式时,客户端调用GASNet的限制只局限于客户端上。GASNet使用内部线程是合法的(甚至是在SEQ编译时),且这些内部线程可以用于执行客户端的AM处理程序。因此,无论是线程模式或其他模式,客户端代码都必须正确使用GASNet的并发控制机制(详见2.3.4节)。