0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オブジェクト指向Cコンパイラcomelangにgoのような並列処理が入りました。

Posted at
#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されているわけではありません。
まあ、同じプロセス間なので問題ないでしょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?