是否存在GCC/Clang属性可标记结构体中被指定互斥锁保护的字段?
基于POSIX与glibc实现多线程队列的锁访问编译检查需求
我正在研究如何仅基于POSIX标准和glibc,从原理层面实现一个多线程安全队列。显然,内部必须借助mutex(或其他锁/同步结构)来保证调用者能独占访问内部数据结构(比如链表或向量)。但用C语言实现时存在一个明显的隐患:如果调用者未获取锁就直接访问内部结构怎么办?
为此我构思了一种设计思路:将互斥锁和它所保护的数据结构放在同一个context结构体中,示例代码如下:
struct custom_queue { struct queue_storage_ details; mutex_t details_mutex; // 希望这里有某种属性标记,关联到details } context;
通过这种结构,我希望能向编译器传递一个约束:字段details仅能在details_mutex被锁定的前提下访问。这类属性可以有不同的变体,比如限定只能对details执行操作,或者允许附带其他操作。
当然,如果把互斥锁存到单独的结构体,或者嵌套在details的上层/下层结构体里,这种检查的可行性就会降低,所以这类检查可能只支持锁和被保护对象位于同一结构体的场景。
理论上,这种机制能让编译器在编译阶段就对互斥锁的错误使用(比如忘记加锁就访问受保护数据)给出警告或错误提示。我想知道,目前是否存在这类编译器特性?
内容的提问来源于stack exchange,提问作者ijustlovemath
相关产品推荐
相关产品推荐

