原子是乙個指向唯一的、不可改變的0個或任意多個位元組序列的指標。
大多數原子都是指向以空字元結束的字串,但是任何乙個指向任意位元組序列的指標都可以是原子。任何原子只可以出現一次。
原子通常被當作資料結構中的關鍵字使用。
atom介面:(atom.h)
#ifndef atom_includeed#define atom_includeed
extern int atom_length(const char *str);
extern const char *atom_new(const char *str,int len);
extern const char *atom_string(const char *str);
extern const char *atom_int(long n);
#endif
實現:(atom.c)
#include "atom.h"#include "limits.h"
#include "mem.h"
#define nelems(x) ((sizeof(x))/(sizeof((x)[0])))
static struct atom*buckets[2048];
const char *atom_string(const char *str)
const char *atom_int(long n)while((m/=10)>0);
if(n<0)
*--s='-';
return atom_new(s,(str+sizeof(str)-s));
}const char *atom_new(const char *str,int len)
p=alloc(sizeof(*p)+len+1);
p->len=len;
p->str=(char*)(p+1);
if(len>0)
memcpy(p->str,str,len);
p->str[len]='\0';
p->link=buckets[h];
buckets[h]=p;
}}int atom_length(const char *str)
c 原子操作 賦值 c 原子操作
這個型別可以在兩個狀態間切換 設定set flag true 和清除clear flag false 必須被atomic flag init初始化此時flag為clear狀態,初始化標準為是清除狀態。當你的標誌物件已初始化,那麼你只能做三件事情 銷毀,清除或設定 查詢之前的值 這些事情對應的函式分別...
程式的原子性
a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 1.從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。2.在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在則...
程式的原子性
眾所周知,原子是構成物質的基本單位 當然電子等暫且不論 所以原子的意思代表著 不可分 由不可分性可知,原子性是拒絕多執行緒操作的 只有分解為多步操作,多個執行緒才能對其操作 就像乙個盒子裡有多個兵乓球,多個人能夠從盒子裡拿桌球 如果盒子只有乙個兵乓球,乙個人拿的話,其他人就拿不到了 這就是原子性,桌...