Skip to content

利用原子变量的生产者消费者示例代码无法运行。 #4

@aoaforever

Description

@aoaforever

当我运行下面的代码时,程序无法得到任何输出,似乎是卡在了某个地方,请问是哪里出错了呢。
源出处

#include <iostream>
#include <thread>
#include <atomic>
#include <list>
#include <iostream>
using namespace std;


class Solution {
public:
  Solution()
  : state_{State::READ},
    trd_{[this]{
        this->customer();
            }
        }
    {     }

    void producer(int val)
    {
      while(state_.load(std::memory_order_acquire) == State::READ);

      task_.push_back(val);
      state_.store(State::WRITE, std::memory_order_release);
    }

    void customer() 
    { 
      while(state_.load(std::memory_order_acquire) == State::WRITE);
      if(!task_.empty()) { 
        int val = task_.front();
        cout<<val<<endl;
        task_.pop_front();
      }

      state_.store(State::READ, std::memory_order_release);
    }
private:
  enum class State {READ, WRITE};

  std::atomic<State> state_;
  std::thread        trd_;
  std::list<int>     task_;
};

int main(){
    Solution s;
    s.producer(2);
    s.producer(3);
    s.producer(1);
    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions