std::mutex我正在尝试在和的帮助下在 C++ 中创建一个线程安全队列std::condition_variable。代码
#include <iostream>
#include<thread>
#include<queue>
#include<atomic>
#include<mutex>
#include<condition_variable>
using namespace std;
template<class T>
class SafeQueue{
public:
queue<T>qu;
mutex mut;
condition_variable cv;
SafeQueue(){}
SafeQueue(queue<T>q):qu(q){}
void push(int val){
unique_lock<mutex>uq(mut);
cv.wait(uq,[&](){return qu.empty();});
qu.push(val);
uq.unlock();
}
bool isEmpty(){
// unique_lock<mutex>uq(mut);
// uq.unlock();
cv.notify_all();
return qu.empty();
}
};
void inc(SafeQueue<int>& sq){
for(int i=0;i<10;i++)
continue;
if(sq.isEmpty())
sq.push(1);
}
void inc1(SafeQueue<int>& sq){
for(int i=0;i<10;i++)
continue;
if(sq.isEmpty())
sq.push(2);
}
int main(){
queue<int>qu;
SafeQueue<int> sq(qu);
thread t1(inc,ref(sq));
thread t2(inc1,ref(sq));
t1.join();
t2.join();
cout<<sq.qu.front();
}
Run Code Online (Sandbox Code Playgroud)
线程安全队列应该 …
我正在尝试按照stm32f407发现板中的教程实施任务计划。
有四个函数,每次执行一个函数,每个函数执行 1ms,然后切换到下一个函数。
教程定义了整个流程,我们将保存每个函数的每个堆栈寄存器,即这些寄存器xpsr,pc,lr,R0...R13然后在上下文切换时将下一个函数的这个值加载到 PSP(处理器堆栈指针)(这将发生在内部sysstick_handler,它将以 1 毫秒的间隔触发)。
我不明白的是,我认为寄存器是全局的,而不是像函数内部的变量那样私有。那么他如何为每个函数保存这些寄存器值。这是给定的代码https://github.com/niekiran/CortexMxProgramming/blob/master/Source_code/015_task_scheduler/Src/main.c如果有人能向我简要介绍一下上下文切换部分,那么我将非常有信心关于我在做什么
谢谢你
我有两个程序来测试 的工作 #undef,但它没有按预期工作。
测试1.cpp
#include<iostream>
#define AB 1
void display(){
#ifdef AB
std::cout<<"yes"<<std::endl;
#endif
}
int main(){
display();
#undef AB
display();
}
Run Code Online (Sandbox Code Playgroud)
输出: yes yes
测试2.cpp
#include<iostream>
#define AB 1
int main(){
#ifdef AB
std::cout<<"yes\n";
#endif
#undef AB
#ifdef AB
std::cout<<"yes\n";
#else
std::cout<<"no\n";
#endif
}
Run Code Online (Sandbox Code Playgroud)
输出 : yes no
即使两个程序的逻辑相同,为什么输出也会有所不同?定义和取消定义宏线程安全吗?