🙄
comelangにgoのような並列処理が入りました。
#include <comelang.h>
#include <comelang-pthread.h>
int fun(int a, int b)
{
printf("%d %d\n", a, b);
return 3;
}
struct sData
{
int@ a;
};
int main(int argc, char** argv)
{
sData data;
int@ a = __channel__;
int@ b = __channel__;
var thread = come {
fun(1, 2);
a <- 111;
a <- 222;
}
b <- 222;
come_join(thread);
come_poll {
a {
printf("a %d\n", <-a);
printf("a %d\n", <-a);
}
b {
printf("b %d\n", <-b);
}
}
return 0;
}
come { } で並列処理に入ります。come fun(1,2);なども可能です。
{}内では親の関数の変数にもアクセスできます。
come_joinで後片付けします。
come_pollはチャネルの入力待ちを行います。
aに入力があれば<-aでチャネルへの入力が出力されます。
基本的に並列で動いている処理はチャネルを使ってデータの受け渡したほうがいいと思います。
入力があるまで、チャネルはブロックするためタイミングを考えやすいからです。
ただし、ポインタはポインタ自体が渡されます。Seriallizeされているわけではありません。
まあ、同じプロセス間なので問題ないでしょう。
Discussion