0
嘗試使此函數正常工作時出現錯誤。我在寫一個並行合併排序函數。錯誤是我似乎無法弄清楚如何傳遞一個向量到pthread_create函數。我似乎無法弄清楚如何傳遞有關向量的所有信息,以便並行mergesort可以工作,但仍然可以將其轉換爲void *,以便我可以將它作爲pthread_create函數的參數傳遞。使用pthreads似乎無法通過pthread_create函數傳遞向量
`void parallel_mergesort(void * a) {`
//std::vector<int> v = (std::vector<int>) * a;
vector<int>* v = static_cast<vector<int>*>(a);
int mid = v->size()/2;
pthread_t threads[2];
int count;
std::vector<int> * v1;
std::vector<int> * v2;
int start = 0;
int end = 0;
for (int i =0; i < mid; i++)
{
v1[i] = v[i];
start = i;
}
for (int j = 0; j < v->size(); j++)
{
v2[j] = v[j+mid];
end = j + mid;
}
if (start >= end) return;
count = pthread_create(threads[0], NULL, parallel_mergesort, (&v1));
if (count) {
printf("unable to create thread");
exit(1);
}
count = pthread_create(threads[1], NULL, parallel_mergesort, &v2);
if (count) {
printf("unable to create thread");
exit(1);
}
pthread_join(&threads[0], NULL);
pthread_join(&threads[1], NULL);
//merge(..
pthread_exit(NULL);
}
int main()
{
std::fstream infile("data.txt", std::ios_base::in);
std::fstream outfile_pms("parallelmergesorted.txt", std::ios_base::out);
std::vector<int> parallel_mergesorted = vals;
parallel_mergesort(parallel_mergesorted);
for(std::vector<int>::iterator it = parallel_mergesorted.begin(); it != parallel_mergesorted.end(); ++it) {
outfile_pms << *it << std::endl;
}
}
我想出了「不能將pthread_t *和pthread_t中的線程[0]'轉換爲pthread_t的問題。」我需要拿出'&'號。然而,pthread_create函數仍然給我一些問題。 – user3088470 2014-12-03 14:58:54
我建議您閱讀您最喜歡的書中關於指針的章節。 – molbdnilo 2014-12-03 15:01:45
@ user3088470你能編輯你的代碼來發佈一個自編的例子嗎(參見http://sscce.org/)? – 2014-12-03 15:09:37