c - Threading issues -
<पी> getvariana: tpp.c: 63: __पीथ्रेड_tpp_change_priority: assertion `new_prio == -1 || (New_prio & gt; = __sched_fifo_min_prio & amp; amp; और new_prio & lt; = __sched_fifo_max_prio) 'असफल।हाय सब,
मैं एक प्रोग्राम फिर से चलाने की कोशिश कर रहा हूँ 5 धागे बनाता है और pthread_join () के बाद, मैं एक रिटर्न करता हूँ, जिसके आधार पर, मैं पूरे प्रोग्राम को फिर से चलाता हूँ, यह (1) पाश में है।
जब मैं प्रोग्राम को चलाने के लिए दूसरी बार, मुझे एक त्रुटि मिलती है जैसा कि आप ऊपर देख सकते हैं मैं इसके मूल का पता लगाने में असमर्थ हूं। क्या कोई यह समझा सकता है कि यह त्रुटि क्यों है?
एफवाईआई: मैं किसी भी म्यूट एक्स लॉक या सिकंदरा का उपयोग न करें। मैं थ्रेडों को शामिल होने के लिए प्रतीक्षा करता हूं जिसके बाद मैं पूरे प्रोग्राम को फिर से चलाता हूं। क्या दौड़ की परिस्थितियों के साथ ऐसा करने के लिए कुछ भी है? मैं मान रहा हूँ, जब मैं सभी 5 थ्रेडों में शामिल होने की प्रतीक्षा करता हूं, तब ही मैं pthread से बाहर निकल सकता हूं
मुख्य {जबकि (1) {test (); }} // मुख्य परीक्षा () {for (i = 0; i & lt; 5; i ++) pthread_create (& amp; th [i], NULL, tfunc, और some_struct); के लिए (i = 0; i & lt; 5, i ++) pthread_join (व [i], NULL); } शून्य * tfunc (शून्य * पीटीआर) {// एक कॉलबैक फ़ंक्शन के लिए एक वैश्विक काउंटर सेट करने के लिए मान // नींद तक तब तक प्रतीक्षा करें यदि (g_count == value_needed) pthread_exit (NULL); }
यहां आपके प्रोग्राम को साफ किया गया है यह उपरोक्त तर्क के बिना चलता है:
#include & lt; stdio.h & gt; # शामिल करें & lt; stdlib.h & gt; # शामिल करें & lt; pthread.h & gt; #include & lt; string.h & gt; स्थिर pthread_t वें [5]; शून्य * tfunc (शून्य * पीटीआर) {नींद (5); / * इसे नींद के बिना परीक्षण करने के लिए इसे हटाएं * / pthread_exit (NULL); } शून्य परीक्षण () {int i; मेमसेट (वें, 0, 5 * आकार (pthread_t)); के लिए (i = 0; i & lt; 5; i ++) {यदि (pthread_create (& amp; th [i], NULL, tfunc, NULL) & lt; 0) पीरर ("pthread_create"); } के लिए (i = 0; i & lt; 5; i ++) {if (pthread_join (व [i], NULL) & lt; 0) पीरर ("pthread_join"); }} Int main (int argc, char ** argv) {जबकि (1) {test (); } बाहर निकलें (0); }
इसे साफ़ करते समय मैंने जो देखा वह है:
के लिए (i = 0; i & lt; 5, i ++) अल्पविराम सेमिकोलन का अर्थ नहीं है, संभवतः लूप काम नहीं कर रहा है
में
test () ,
th नहीं था किसी भी असफल
pthread_create का अर्थ किसी पुराने धागा संदर्भ का उपयोग कर रहा था।
में
tfunc , आपने एक
pthread_join किया अगर
(g_count == value_needed) , लेकिन फिर आप वैसे भी निकल जाते हैं, यानी आप हमेशा ही
pthread_join या समकक्ष कर रहे थे। नोट: मैंने
sleep () के बिना भी नीचे संस्करण का परीक्षण किया है, इसलिए तुरंत निकलता है अब काम करता है।
विभिन्न अन्य भौतिक मुद्दों। < / Li>
कोई त्रुटि हैंडलिंग
कुछ संकलन समस्याओं के कारण, मुझे संदेह है कि आपने ऊपर चिपकाए गए कोड को संकलित नहीं किया है, लेकिन कुछ और जटिल और मुझे यह संदेह है कि इसका कारण यह है कि इस मुद्दे का कारण हो।
यदि आप उस कॉम्पलेबल कोड का एक न्यूनतम उदाहरण पोस्ट करते हैं जो वास्तव में इस मुद्दे का कारण बनता है, तो मैं आपको और भी मदद कर सकता हूं।
Comments
Post a Comment