विषय पर बढ़ें

अंतिम अद्यतन:2026-10-12

Helgrind concurrency error detection

C++那些事 का helgrind से concurrency programming detection

आमतौर पर हम multithreaded programs लिखते समय दो समस्याएँ आसानी से आ जाती हैं:

  • Deadlock हो गया, पता नहीं किस कारण से हुआ
  • Data inconsistent, multiple threads ने locks गलत उपयोग किए

तो क्या इन दोनों परिदृश्यों को detect करने का कोई tool है?

उत्तर है हाँ, हम valgrind के helgrind tool से इन दोनों समस्याओं का पता लगा सकते हैं, इस लेख की व्याख्या को और सरल बनाने के लिए कुछ उदाहरण दिए गए हैं।

नोट: पूरे उदाहरण और उनके सुधारे गए रूप 星球 पर अपडेट किए जा चुके हैं।

Deadlock

मान लीजिए दो threads एक-दूसरे के locks पकड़े हुए हैं, ऐसी स्थिति में हम deadlock simulate कर सकते हैं, उदाहरण के लिए:

void thread_func1() {
    std::lock_guard<std::mutex> lock1(mutex1);
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    std::lock_guard<std::mutex> lock2(mutex2);
}

void thread_func2() {
    std::lock_guard<std::mutex> lock2(mutex2);
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    std::lock_guard<std::mutex> lock1(mutex1);
}

helgrind का उपयोग करने का तरीका इस प्रकार है:

valgrind --tool=helgrind ./a.out 

इस समय हम deadlock की location देख सकते हैं, उदाहरण के लिए इस example में दिखाया गया है कि दो threads ने संबंधित स्थानों पर deadlock किया

thread_func2() (deadlock.cc:18)
thread_func1() (deadlock.cc:12)

deadlock

Data race

मान लीजिए एक shared variable है, जिसे हम multiple threads से 10w बार increment करते हैं, तो परिणाम कितना होगा?

स्पष्ट है कि यहाँ multiple threads के global variable पर race की समस्या पैदा हुई है, अंतिम परिणाम inconsistent आता है, helgrind से detect करने का तरीका वही है जो ऊपर बताया गया।

int shared_var = 0; 

void increment() {
    for (int i = 0; i < 100000; ++i) {
        ++shared_var; 
    }
}

इस समय हम देख सकते हैं कि data race वाली line कौन सी है, और फिर समस्या हल करें।

datarace

अंत में, कुछ प्रश्न छोड़ते हैं:

1.ऊपर के इन दोनों समस्याग्रस्त code को कैसे ठीक करें?

2.ऊपर बताए tool के अलावा, कोई और तरीका भी है?

इस section का अंत

संबंधित विषय

टिप्पणियाँ