खोज…


std :: recursive_mutex

पुनरावर्ती म्यूटेक्स एक ही थ्रेड को एक संसाधन को लॉक करने की अनुमति देता है - एक अनिर्दिष्ट सीमा तक।

इसके लिए बहुत कम वास्तविक शब्द औचित्य हैं। कुछ जटिल कार्यान्वयनों को लॉक जारी किए बिना किसी फ़ंक्शन की ओवरलोड कॉपी को कॉल करने की आवश्यकता हो सकती है।

    std::atomic_int temp{0};
    std::recursive_mutex _mutex;
    
    //launch_deferred launches asynchronous tasks on the same thread id

    auto future1 = std::async(
                std::launch::deferred,
                [&]()
                {
                    std::cout << std::this_thread::get_id() << std::endl;

                    std::this_thread::sleep_for(std::chrono::seconds(3));
                    std::unique_lock<std::recursive_mutex> lock( _mutex);
                    temp=0;
                    
                });

    auto future2 = std::async(
                std::launch::deferred,
                [&]()
                {
                    std::cout << std::this_thread::get_id() << std::endl;
                    while ( true )
                    {
                        std::this_thread::sleep_for(std::chrono::milliseconds(1));
                        std::unique_lock<std::recursive_mutex> lock( _mutex, std::try_to_lock);
                        if ( temp < INT_MAX )
                             temp++;

                        cout << temp << endl;
                        
                    }
                });
    future1.get();
    future2.get();


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow