# atomic **Repository Path**: MacRsh/atomic ## Basic Information - **Project Name**: atomic - **Description**: No description available - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-09-01 - **Last Updated**: 2024-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Atomic [English document](README_EN.md) 这个项目实现了一个简单的原子操作库,提供了对整数的原子操作能力。 ## 特性 - **原子初始化和销毁**:支持初始化、去初始化以及创建和销毁原子变量。 - **基本原子操作**:支持加载、存储、交换、加法、减法、位与、位或等操作。 - **比较并交换**:提供原子的比较并交换操作。 ## 使用 要使用此原子操作库,将此项目添加到您的工程中,并包含头文件 `atomic.h`。 ## 函数 ### 初始化和销毁 - `void atomic_init(Atomic_t *atomic, Atomic_t value)`:初始化原子变量。 - `void atomic_deinit(Atomic_t *atomic)`:去初始化原子变量。 - `Atomic_t *atomic_new(Atomic_t value)`:创建新的原子变量。 - `void atomic_del(Atomic_t *atomic)`:销毁原子变量。 ### 基本操作 - `Atomic_t atomic_load(Atomic_t *atomic)`:加载原子变量。 - `void atomic_store(Atomic_t *atomic, Atomic_t value)`:存储值到原子变量。 - `Atomic_t atomic_exchange(Atomic_t *atomic, Atomic_t value)`:交换原子变量的值。 - `Atomic_t atomic_fetch_add(Atomic_t *atomic, Atomic_t value)`:原子加法操作。 - `Atomic_t atomic_fetch_sub(Atomic_t *atomic, Atomic_t value)`:原子减法操作。 - `Atomic_t atomic_fetch_and(Atomic_t *atomic, Atomic_t value)`:原子位与操作。 - `Atomic_t atomic_fetch_or(Atomic_t *atomic, Atomic_t value)`:原子位或操作。 - `bool atomic_compare_exchange(Atomic_t *atomic, Atomic_t old_value, Atomic_t new_value)`:比较并交换操作。 ## 示例 ```c #include #include int main(void) { /* 创建一个新的原子变量,初始值为10 */ Atomic_t *atomic = atomic_new(10); /* 存储新值到原子变量 */ atomic_store(atomic, 20); printf("存储后值: %d\n", atomic_load(atomic)); /* 原子加法 */ atomic_fetch_add(atomic, 5); printf("加法后值: %d\n", atomic_load(atomic)); /* 原子减法 */ atomic_fetch_sub(atomic, 2); printf("减法后值: %d\n", atomic_load(atomic)); /* 原子位与操作 */ atomic_fetch_and(atomic, 15); printf("位与后值: %d\n", atomic_load(atomic)); /* 原子位或操作 */ atomic_fetch_or(atomic, 8); printf("位或后值: %d\n", atomic_load(atomic)); /* 比较并交换操作 */ bool success = atomic_compare_exchange(atomic, 12, 25); printf("比较并交换成功: %s\n", success ? "是" : "否"); printf("交换后值: %d\n", atomic_load(atomic)); /* 销毁原子变量 */ atomic_del(atomic); return 0; } ``` ## 许可证 本项目使用 Apache-2.0 许可证。有关详细信息,请参阅 LICENSE 文件。 ## 作者 (c) 2024, MacRsh