两个线程之间的列表共享

List share between two threads

我想在 C++ 中在两个线程之间共享一个列表。我希望非常简单,而不是采用 FIFO 或共享内存,所以我只使用互斥锁和锁。

我试过这种方法,效果很好:

#include <string.h>
#include <mutex> 
#include <iostream>
#include <thread>
#include <list>

std::list<int> myList;
std::mutex list_mutex; 

    void client(){
      std::lock_guard<std::mutex> guard(list_mutex);

        myList.push_back(4);

    };
    
 

    void server(){

      std::lock_guard<std::mutex> guard(list_mutex);

      myList.push_back(2);

    };

    void print(std::list<int> const &list)
    {
    for (auto const& i: list) {
        std::cout << i << "\n";
    }
    };

    int main(int ac, char** av)
    {
      
      std::mutex list_mutex; 

      std::thread t1(client);
      std::thread t2(server);


      t1.join();
      t2.join();

      print(myList);
      std::cout<<"test";

      return 0;
    }

它给我打印这个


24test

这很好用,但是我不确定我使用的是同一把锁吗?我的主管希望我在代码中有明确的 Lock/Unlock。至少如果我可以使用相同的互斥量?

非常感谢你帮助我

Ted 的评论很重要,您正在使用的是线程,而不是进程。进程不共享内存(除了使用共享内存,但你想避免这种情况)。线程彼此共享它们的整个内存 space。

您还提到您的主管希望您使用 unlock/lock 部分。您可以通过调用:

list_mutex.lock()
... critical section ...
list_mutx.unlock()

但是您已经通过构建 lock_guard 隐含地执行了此操作。 lock_guard 在创建时锁定并在当前作用域结束时解锁。

如 Ted 所述,您需要删除 list_mutex 的第二个声明(在 main 内)。