假設我們有一個長度爲256(可以更多或更少)的數組或向量,並且生成的pthread數爲4(可以更多或更少)。使用pthreads處理數組/矢量的部分
我需要弄清楚如何將每個pthread分配給一個進程的一部分向量。
所以下面的代碼調度多個線程。
for(int i = 0; i < thread_count; i++)
{
int *arg = (int *) malloc(sizeof(*arg));
*arg = i;
thread_err = pthread_create(&(threads[i]), NULL, &multiThread_Handler, arg);
if (thread_err != 0)
printf("\nCan't create thread :[%s]", strerror(thread_err));
}
正如可以從上面的代碼告訴,每個線程傳遞一個參數值來起動功能。在四個線程的情況下,參數值範圍從0到3,5個線程= 0到4等等。
現在開始功能執行以下操作:
void* multiThread_Handler(void *arg)
{
int thread_index = *((int *)arg);
unsigned int start_index = (thread_index*(list_size/thread_count));
unsigned int end_index = ((thread_index+1)*(list_size/thread_count));
std::cout << "Start Index: " << start_index << std::endl;
std::cout << "End Index: " << end_index << std::endl;
std::cout << "i: " << thread_index << std::endl;
for(int i = start_index; i < end_index; i++)
{
std::cout <<"Processing array element at: " << i << std::endl;
}
}
所以在上面的代碼中,其參數的線程是0應該處理部0 - 63(在256和陣列尺寸的情況下線程數爲4),參數爲1的線程應該處理64-127部分,等等。最後一個線程處理192 - 256.
這四個部分的每一個都應該並行處理。
此外,pthread_join()函數存在於原始主代碼中,以確保每個線程在主線程終止之前完成。
問題是,上述for循環中的值i會帶有可疑的大值。我不確定爲什麼會出現這種情況,因爲我對pthreads相當陌生。
它似乎有時會很好地工作,其他時間和其他時間,我的價值變得如此之大,它會導致程序中止或呈現分段錯誤。
我看到兩個變量list_index和thread_index,我看到thread_index被聲明在哪裏是list_index定義? – Ravi
'*((int *)arg)' - 這是否正確?你投到一個int指針,然後指向指針? – DumbCoder
@DumbCoder對我來說看起來是正確的。 *版本以外的*用於在演員播放後取消參考指針。 – Ravi