plugins/languages/c/skills/concurrency/SKILL.md
C concurrency conventions: C11 atomics with explicit memory orders, C11 threads.h and POSIX pthread (mutex, condvar, rwlock, barrier), cache-line alignment to kill false sharing, ThreadSanitizer for race detection, and async-signal-safe rules for signal handlers. Use when designing multi-threaded data structures, debugging races/deadlocks, picking a memory order, or reasoning about lock-free patterns. Triggers on "原子操作", "memory_order", "TSan", "data race", "死锁", "条件变量", "false sharing", "pthread_mutex", "atomic_compare_exchange".
npx skillsauth add lazygophers/ccplugin c-concurrencyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
_Atomic,要么用锁保护,不能"看起来安全"。memory_order_seq_cst;只有明确分析过 happens-before 后才放宽。while (!pred) 循环中等待,防止虚假唤醒。destroy。c-posix 中 POSIX.1 §2.4 列表),共享变量类型为 volatile sig_atomic_t 或 atomic_*。_Alignas(64))以消除 false sharing。<stdatomic.h>)_Atomic int counter = 0; // 关键字
atomic_int counter2 = 0; // typedef 别名
atomic_store(&counter, 42);
int v = atomic_load(&counter);
int old = atomic_fetch_add(&counter, 1);
// CAS
int expected = 0;
while (!atomic_compare_exchange_weak(&counter, &expected, expected + 1)) { }
| order | 用途 | 备注 |
|-------|-----|------|
| relaxed | 纯计数器 / 统计 | 无 happens-before |
| acquire | 读端(load) | 与同变量的 release 配对 |
| release | 写端(store) | 发布数据 |
| acq_rel | RMW | 同时具备两端语义 |
| seq_cst | 默认 | 全序,无脑安全 |
经典 publish-subscribe:
atomic_store_explicit(&ready, 1, memory_order_release); // 发布
if (atomic_load_explicit(&ready, memory_order_acquire)) // 读端
consume(data);
<threads.h>)int worker(void *arg) { /* ... */ return 0; }
thrd_t t;
if (thrd_create(&t, worker, &arg) != thrd_success) return -1;
int rc; thrd_join(t, &rc);
注:MSVC 仍未原生提供 <threads.h>;跨平台首选 pthread + _Atomic。
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t c = PTHREAD_COND_INITIALIZER;
bool ready = false;
// 生产者
pthread_mutex_lock(&m);
ready = true;
pthread_cond_signal(&c); // 多消费者改用 broadcast
pthread_mutex_unlock(&m);
// 消费者
pthread_mutex_lock(&m);
while (!ready) pthread_cond_wait(&c, &m); // while,不是 if
pthread_mutex_unlock(&m);
pthread_mutex_destroy(&m);
pthread_cond_destroy(&c);
读写锁:pthread_rwlock_rdlock / wrlock / unlock / destroy。
_Alignas(64) struct PerCpu {
_Atomic uint64_t counter;
char _pad[64 - sizeof(_Atomic uint64_t)];
};
gcc -std=c17 -fsanitize=thread -g -O1 prog.c -lpthread -o prog
./prog # 自动报告 data race / lock-order-inversion / deadlock
TSan 开销 5–15×。CI 中跑全量测试用例可显著降低生产环境竞态风险。
允许:write, _exit, sigaction, kill, read, sem_post(部分平台),原子 store/load。
禁止:malloc/free, printf/snprintf, pthread_mutex_*(除 pthread_kill 投递路径)。
信号 ↔ 主流程通信使用 volatile sig_atomic_t 或 atomic_int。
acquire/release 配对足够。load。liburcu、folly、boost.lockfree 等成熟实现,自写需充分 stress test。_Atomic 或锁保护while 循环中等待tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。