在跨平台项目上工作,我真的很想使用linux内核列表。
尽管Linux双链表(https://github.com/torvalds/linux/blob/master/include/linux/list.h)的实现并不涉及太多代码,但我想知道使用与GCC不同的编译器是否安全。
特别是,列表可以安全地使用MSVC编译器吗?是否有任何部分可能无法使用它?
答案 0 :(得分:1)
双链表struct list_head
的实现与编译器无关,可以与任何C89兼容的编译器一起使用thread-unsafe。
通过该解释,WRITE_ONCE
实现中的宏INIT_LIST_HEAD
可以编码为简单赋值。 (最初,这个宏使用 volatile ,对于多线程程序,它在C标准中没有明确定义的语义)。