سؤال

هل هناك طريقة لقفل تلقائيا حاوية STL على الوصول، دون الحاجة إلى تأمين والافراج عن من حوله؟

هل كانت مفيدة؟

المحلول

والمعيار C ++ currrent لا يقول شيئا عن سلامة موضوع للحاويات STL. رسميا أنه من الممكن لتنفيذ STL أن يكون الخيط آمنة، ولكن من غير المألوف للغاية. إذا تنفيذ STL الخاص بك ليس مسار آمن، فإنك سوف تحتاج إلى "تأمين والافراج حوله" أو إيجاد طريقة أخرى لتنسيق وصول.

وقد تكون مهتمة في إنتل خيوط بناء كتل التي تضم بعض حاويات موضوع آمنة مماثلة إلى حاويات STL.

نصائح أخرى

وبعد الكثير من غوغلينغ، يبدو أن طريقة للقيام بذلك هو خلق التفاف حول الحاويات الخاصة بك. منها مثلا:

template<typename T>
class thread_queue
{
private:
    std::queue<T> the_queue;
    mutable boost::mutex the_mutex;
    boost::condition_variable the_condition_variable;
public:
    void push(T const& data)
    {
        boost::mutex::scoped_lock lock(the_mutex);
        the_queue.push(data);
        lock.unlock();
        the_condition_variable.notify_one();
    }
    etc ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top