ESP32双核下WiFi任务钉Core0、应用逻辑放Core1,共享变量不加锁最典型的坑是编译器与CPU的乱序/缓存可见性问题:变量可能被编译器优化进寄存器,Core1写了Core0读不到旧值,或反之。其次是多字节变量(如int64、结构体、float)非原子撕裂:一个核写一半另一个核读,得到半新半旧数据。第三是复合操作竞态,如counter++在双核下丢失更新。第四是指针/链表类共享结构在遍历时被另一核修改导致野指针或死循环。实操建议:简单标志用volatile+原子操作(C11 atomic或portMUX临界区);多字段结构用portMUX_TYPE自旋锁或FreeRTOS互斥量保护;跨核通信优先用队列/事件组/任务通知,避免裸共享;对时序敏感数据用双缓冲或seqlock。注意volatile不保证原子性,不能替代锁。