コンパイラがC11標準をサポートしている場合は、具体的にはstdatomic.h
です。
以下は、その背後にある基本的な考え方を示す原型の例です。それほど難しいことではありません。これはposixスレッドを使いますが、スレッドライブラリを使うことができます。
#include <stdio.h>
#include <stdatomic.h>
#include <pthread.h>
#define ELEMENTS_N 500000
_Atomic unsigned int x;
unsigned int N;
unsigned int anyArray[ELEMENTS_N];
void * ThreadLoop (void * args)
{
unsigned int l;
while((l = atomic_load(&x)) < N)
{
if (atomic_compare_exchange_weak(&x, &l, l + 1))
{
anyArray[l] = l;
}
}
return 0;
}
int main (int argc, char *argv[])
{
pthread_t th1;
pthread_t th2;
int v;
atomic_store(&x, 0);
N = ELEMENTS_N;
v = pthread_create(&th1, NULL, &ThreadLoop, NULL);
v = pthread_create(&th2, NULL, &ThreadLoop, NULL);
pthread_join(th1, NULL);
pthread_join(th2, NULL);
for(v = 0; v < ELEMENTS_N; v++)
{
printf("%d ", anyArray[v]);
}
return 0;
}
'Cで並列処理を行う方法はありません '新しい標準C11は現在わずか数日前ですが、これは変更されています! – u0b34a0f6ae
@ kaizer.seうわー、私はC11が承認されたことを認識していませんでした!私は私の答えでそれを言及します。ありがとう! – Mysticial
ご返信ありがとうございます。私はこれを試した。いくつかのa [i]では、コードが正しく実行されているにもかかわらず、 "nan"または "-nan"を取得しています。私はある種の同期問題があるかもしれないと思う。 –