小编Lon*_*gLT的帖子

设计mqtt主题的好方法?

我对mqtt设计非常陌生。

从互联网上的一些教程中可以看到,常见的mqtt主题具有以下格式:/ home / room / device_type / device_id

我看不到这样做的好处。而且不知道如何使用这种设计。

从我的角度来看,设备(dev)可能会订阅(sub)来控制主题,而会发布(pub)到状态主题。像这样:

  • pub:客户端/ dev /设备/统计
  • 子:clients / dev / devid / ctrl

这样,看来客户端和设备的sub,pub逻辑非常简单

可能有人请告诉我设计MQTT主题的一些好办法吗?

(!),请不要开始话题“/”(此人被推荐HiveMQ队)

编辑:

我想通了,不管是什么样的设计,模型必须服务,能够至少包括:

  1. 单独控制:将控制命令发送到特定设备。
  2. 组控制:向一组设备发送控制命令:类型,已定义的组
  3. 能够接收设备状态。

非常感谢你

mqtt

5
推荐指数
2
解决办法
3653
查看次数

加载/存储松弛原子变量和普通变量有什么区别?

正如我从测试用例中看到的:https : //godbolt.org/z/K477q1

生成的程序集加载/存储原子放松与普通变量相同:ldr 和 str

那么,松弛原子变量和普通变量之间有什么区别吗?

c++ atomic memory-barriers c++11 stdatomic

4
推荐指数
3
解决办法
822
查看次数

内存模型,加载获取语义实际上是如何工作的?

来自关于内存重新排序的非常好的论文文章

Q1:我知道缓存一致性、存储缓冲区和失效队列是内存重新排序的根本原因吗?

存储释放是很好理解的,必须等待所有加载和存储完成才能将标志设置为 true。

关于加载获取,原子加载的典型用途是等待标志。假设我们有 2 个线程:

int x = 0;
std::atomic<bool> ready_flag = false;
Run Code Online (Sandbox Code Playgroud)
// thread-1
if(ready_flag.load(std::memory_order_relaxed))
{
    // (1)
    // load x here
}
// (2)
// load x here
Run Code Online (Sandbox Code Playgroud)
// thread-2
x = 100;
ready_flag.store(true, std::memory_order_release);
Run Code Online (Sandbox Code Playgroud)

编辑:在线程 1 中,它应该是一个 while 循环,但我复制了上面文章中的逻辑。因此,假设内存重新排序及时发生。

Q2 : 因为(1)和(2)取决于if条件,CPU必须等待ready_flag,这是否意味着write-release就足够了?在这种情况下,内存重新排序是如何发生的?

Q3:显然我们有load-acquire,所以我猜 mem-reorder 是可能的,那么我们应该把栅栏放在哪里,(1)还是(2)?

c++ memory-model stdatomic instruction-reordering

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

如何通过地址更改const变量的值?

我试图通过其地址更改const变量的值.

遵循以下代码:

#include <iostream>
#include <string>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
#include <stdio.h>

using namespace std;

int main(void)
{
    uint64_t const x = -1;
    uint64_t *b = reinterpret_cast<uint64_t*>(0x28ff10);
    cout<< x << endl;
    cout<< &x << " " << b << " " << *b << endl;
    printf("%p\n", &x);
    *b = 10;
    cout<< &x << " " << x << " " << b << " " << *b << " " << *(reinterpret_cast<uint64_t*>(0x28ff10)) <<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用MinGW编译4.8.1 …

c++ pointers const

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