書き込みシステムでは、フォークとそのコピーに問題があります。 params.writersCount procesessを作成し、それぞれの内部ID(1からparams.writersCountまで)を取得する必要があります。だから子供の私は親プロセスを待っています、それは子の内部IDを初期化します(writers [i] = processId)。私はwriterSimulationを呼び出して引数のようなコンテキストアドレスを渡すことができます。なぜなら、context.idはその子の内部IDですから、コピーオンライトシステム(context.id = j + 1はUnixにページをコピーさせるので、各子内部IDを持つコンテキストコピーを所有しています)。しかし、私がwriterSimulation関数でcontext.idを使用しようとすると、私は0を得ています。何が間違っているのですか?フォークと共有ページ
for(int i = 0; i < params.writersCount; i++)
{
pid_t processId = fork();
if(!processId)
{
srand((unsigned int)(seconds+getpid()));
while(!context.id)
{
for(int j = 0; j < params.writersCount; j++)
{
if(writers[j] == getpid())
{
context.id = j+1;
}
}
struct timespec wait = {.tv_sec = 0, .tv_nsec = 500000};
nanosleep(&wait, NULL);
}
int simError = writerSimulation(&context);
return simError;
}
writers[i] = processId;
}
首都を含む標準英語を書いてください。 – thb