小编Abh*_*ngh的帖子

线程安全队列 C++

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)

线程安全队列应该 …

c++ multithreading condition-variable

2
推荐指数
1
解决办法
4355
查看次数

上下文切换

我正在尝试按照stm32f407发现板中的教程实施任务计划。

有四个函数,每次执行一个函数,每个函数执行 1ms,然后切换到下一个函数。

教程定义了整个流程,我们将保存每个函数的每个堆栈寄存器,即这些寄存器xpsrpclrR0...R13然后在上下文切换时将下一个函数的这个值加载到 PSP(处理器堆栈指针)(这将发生在内部sysstick_handler,它将以 1 毫秒的间隔触发)。

我不明白的是,我认为寄存器是全局的,而不是像函数内部的变量那样私有。那么他如何为每个函数保存这些寄存器值。这是给定的代码https://github.com/niekiran/CortexMxProgramming/blob/master/Source_code/015_task_scheduler/Src/main.c如果有人能向我简要介绍一下上下文切换部分,那么我将非常有信心关于我在做什么

谢谢你

c embedded stm32 cortex-m

1
推荐指数
1
解决办法
112
查看次数

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

即使两个程序的逻辑相同,为什么输出也会有所不同?定义和取消定义宏线程安全吗?

c++ macos c-preprocessor

0
推荐指数
1
解决办法
94
查看次数