<small id='Cedc7'></small><noframes id='Cedc7'>

      <tfoot id='Cedc7'></tfoot>

    1. <legend id='Cedc7'><style id='Cedc7'><dir id='Cedc7'><q id='Cedc7'></q></dir></style></legend>
        <bdo id='Cedc7'></bdo><ul id='Cedc7'></ul>
      <i id='Cedc7'><tr id='Cedc7'><dt id='Cedc7'><q id='Cedc7'><span id='Cedc7'><b id='Cedc7'><form id='Cedc7'><ins id='Cedc7'></ins><ul id='Cedc7'></ul><sub id='Cedc7'></sub></form><legend id='Cedc7'></legend><bdo id='Cedc7'><pre id='Cedc7'><center id='Cedc7'></center></pre></bdo></b><th id='Cedc7'></th></span></q></dt></tr></i><div id='Cedc7'><tfoot id='Cedc7'></tfoot><dl id='Cedc7'><fieldset id='Cedc7'></fieldset></dl></div>

      STL 队列的线程安全

      Thread safety for STL queue(STL 队列的线程安全)
        <tbody id='2OzXE'></tbody>

      • <bdo id='2OzXE'></bdo><ul id='2OzXE'></ul>
        <i id='2OzXE'><tr id='2OzXE'><dt id='2OzXE'><q id='2OzXE'><span id='2OzXE'><b id='2OzXE'><form id='2OzXE'><ins id='2OzXE'></ins><ul id='2OzXE'></ul><sub id='2OzXE'></sub></form><legend id='2OzXE'></legend><bdo id='2OzXE'><pre id='2OzXE'><center id='2OzXE'></center></pre></bdo></b><th id='2OzXE'></th></span></q></dt></tr></i><div id='2OzXE'><tfoot id='2OzXE'></tfoot><dl id='2OzXE'><fieldset id='2OzXE'></fieldset></dl></div>

          <tfoot id='2OzXE'></tfoot>
          • <legend id='2OzXE'><style id='2OzXE'><dir id='2OzXE'><q id='2OzXE'></q></dir></style></legend>

            1. <small id='2OzXE'></small><noframes id='2OzXE'>

                本文介绍了STL 队列的线程安全的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我使用队列在线程之间进行通信.我有一个读者和多个作者线程.我的问题是,每次我从队列中为读者使用 push/front/pop 时,是否需要锁定队列?我可以执行以下操作吗:

                I am using a queue to communicate between threads. I have one reader and multiple writer threads. My question is do I need to lock the queue every time when I use push/front/pop from the queue for the reader? Can I do something like the following:

                //reader threads
                getLock();
                get the number of elements from the queue
                releaseLock();
                
                int i = 0;
                while( i < numOfElements){
                    queue.front();
                    queue.pop();
                    i++
                }
                

                这个想法是我想减少锁定代码的粒度,因为写入器线程只会写入队列的后面,并且只有一个读取器线程.只要我得到元素的数量,那么我就可以从队列中获取元素,或者我是否需要将 front()pop() 括在锁中还有吗?

                The idea is that I want to reduce the granularity of the locked code and since the writer thread would only write to the back of the queue and there is only a single reader thread. As long as I get the number of elements, then I could get the elements from the queue OR do I need to enclose the front() and pop() in the lock as well?

                推荐答案

                正如其他人已经提到的,标准容器不需要保证线程安全,因此您所要求的内容无法可移植地实现.您可以通过使用 2 个队列和一个指示写入器当前正在使用的队列的队列指针来减少读取器线程锁定写入器的时间.

                As others have already mentioned, standard containers are not required to guarantee thread safety so what you're asking for cannot be implemented portably. You can reduce the time your reader thread is locking the writers out by using 2 queues and a queue pointer that indicates the queue that is currently in use by the writers.

                每位作家都会:

                • 获取锁
                • 将元素推入队列指针当前指向的队列
                • 释放锁

                然后读者可以执行以下操作:

                The reader can then do the following:

                • 获取锁
                • 切换队列指针指向第二个队列
                • 释放锁
                • 处理第一个队列中的元素

                这篇关于STL 队列的线程安全的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                What is the past-the-end iterator in STL C++?(STL C++ 中的最后迭代器是什么?)
                vector::at vs. vector::operator[](vector::at 与 vector::operator[])
                C++ equivalent of StringBuffer/StringBuilder?(C++ 等效于 StringBuffer/StringBuilder?)
                Adding types to the std namespace(将类型添加到 std 命名空间)
                Is the C++ std::set thread-safe?(C++ std::set 线程安全吗?)
                How to use std::find/std::find_if with a vector of custom class objects?(如何将 std::find/std::find_if 与自定义类对象的向量一起使用?)
                  <tbody id='JgriX'></tbody>
                  • <bdo id='JgriX'></bdo><ul id='JgriX'></ul>
                    <legend id='JgriX'><style id='JgriX'><dir id='JgriX'><q id='JgriX'></q></dir></style></legend>

                    • <tfoot id='JgriX'></tfoot>

                        • <i id='JgriX'><tr id='JgriX'><dt id='JgriX'><q id='JgriX'><span id='JgriX'><b id='JgriX'><form id='JgriX'><ins id='JgriX'></ins><ul id='JgriX'></ul><sub id='JgriX'></sub></form><legend id='JgriX'></legend><bdo id='JgriX'><pre id='JgriX'><center id='JgriX'></center></pre></bdo></b><th id='JgriX'></th></span></q></dt></tr></i><div id='JgriX'><tfoot id='JgriX'></tfoot><dl id='JgriX'><fieldset id='JgriX'></fieldset></dl></div>

                          <small id='JgriX'></small><noframes id='JgriX'>