संकलक यदि आप नहीं शिकायत एक शून्य सूचक के लिए i
डालें:
pthread_create(&thread_tid[i], NULL, collector, (void*)i);
कहा कि, कास्टिंग एक सूचक को एक पूर्णांक सख्ती से सुरक्षित नहीं है:
आईएसओ/आईईसी 9899: 201x 6.3.2.3 प्वाइंटर
- एक पूर्णांक किसी भी सूचक प्रकार में परिवर्तित किया जा सकता है। जैसा कि पहले निर्दिष्ट किया गया है, परिणाम कार्यान्वयन-परिभाषित है, शायद सही ढंग से गठबंधन नहीं किया जा सकता है, संदर्भित प्रकार की इकाई को इंगित नहीं कर सकता है, और एक जाल प्रतिनिधित्व हो सकता है।
तो आप प्रत्येक थ्रेड के लिए एक अलग सूचक पास करने से बेहतर हैं।
यहाँ एक पूर्ण काम कर उदाहरण है, जो प्रत्येक धागा एक सरणी में एक अलग तत्व के लिए सूचक गुजरता है:
#include <pthread.h>
#include <stdio.h>
void * collector(void* arg)
{
int* a = (int*)arg;
printf("%d\n", *a);
return NULL;
}
int main()
{
int i, id[10];
pthread_t thread_tid[10];
for(i = 0; i < 10; i++) {
id[i] = i;
pthread_create(&thread_tid[i], NULL, collector, (void*)(id + i));
}
for(i = 0; i < 10; i++) {
pthread_join(thread_tid[i], NULL);
}
return 0;
}
pthreads here के लिए एक अच्छा परिचय नहीं है।
स्रोत
2013-10-26 02:05:09
मेरे लिए काम नहीं किया। अनियमित इंडेक्स मिला। हालांकि यह काम किया गया: pthread_create (& thread_tid [i], न्यूल, कलेक्टर, (शून्य *) (आईडी [i])); – Vardit