We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
当我运行下面的代码时,程序无法得到任何输出,似乎是卡在了某个地方,请问是哪里出错了呢。 源出处
#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; }
The text was updated successfully, but these errors were encountered:
打印输出试试
Sorry, something went wrong.
首先 trd_ 线程只会调用 customer 函数一次,会错过运行的时机。Show you code
class Solution { public: Solution() : state_{State::READ}, trd_{[this] { while (1) { this->customer(); } // this->customer(); }} { } ~Solution() { if (trd_.joinable()) { trd_.join(); } } void producer(int val) { while (state_.load(std::memory_order_acquire) != State::READ) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } task_.push_back(val); state_.store(State::WRITE, std::memory_order_release); } void customer() { while (state_.load(std::memory_order_acquire) != State::WRITE) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); } 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_; };
No branches or pull requests
当我运行下面的代码时,程序无法得到任何输出,似乎是卡在了某个地方,请问是哪里出错了呢。
源出处
The text was updated successfully, but these errors were encountered: