我已經看過我能找到的唯一類似帖子,但它不是我正在尋找的。使用共享內存與叉()
基本上,我試圖運行Odd-Even Sort與分叉,所以孩子運行賠率和父母運行evens。這些都需要共享向量inputValues,以及布爾型排序。
下面的代碼是沒有我的任何失敗的嘗試在共享內存,並且只是使用叉子與搜索算法的基本框架:
while(!sorted)
{
pID = fork();
sorted = true;
cout << "Sort set to TRUE." << endl;
if(pID == 0)
{
int num = 1;
cout << "Child swap run" << endl;
Swap((void *) num);
cout << "Status: " << ((sorted) ? "SORTED" : "UNSORTED") << endl;
exit(0);
}
else if(pID < 0)
{
cout << "Failed to fork." << endl;
exit(1);
}
else
{
wpid = waitpid(pID, &status, waitStatus);
int num = 0;
cout << "Parent swap run" << endl;
Swap((void *) num);
cout << "Status: " << ((sorted) ? "SORTED" : "UNSORTED") << endl;
}
}
我試過黑客進行這種共享的多種方式的內存,但無法找到真正解釋它如何工作,我需要什麼以及最好的方法。
所以,我的要求如下:
- 的家長和孩子必須能夠共享和操縱全局矢量和布爾
- 這必須能夠在一個循環中運行,如圖所示
- 這必須與變量的工作中主要使用()和掉期()函數
如果您有什麼祕訣,我非常感謝他們。謝謝!
查看'shm_open' POSIX API調用的手冊頁。您想要創建一個共享內存區域,並將這兩個進程所訪問的變量放在那裏。你也可以很容易地用'mmap'調用。確保你的訪問是線程安全的......使用共享內存沒有固有的鎖定,所以你必須小心。 – Borealid
請記住'shm_open',您需要調用'ftruncate'來爲共享內存對象分配空間,因此內存對象中的空間不會像您使用'std :: VECTOR'。如果您需要更多空間,則必須在運行時手動管理共享內存對象的大小。 – Jason
這很明顯不是C代碼。 – Puppy