C 程式 原子

2022-02-08 06:54:49 字數 1129 閱讀 9104

原子是乙個指向唯一的、不可改變的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塊錢,現在則...

程式的原子性

眾所周知,原子是構成物質的基本單位 當然電子等暫且不論 所以原子的意思代表著 不可分 由不可分性可知,原子性是拒絕多執行緒操作的 只有分解為多步操作,多個執行緒才能對其操作 就像乙個盒子裡有多個兵乓球,多個人能夠從盒子裡拿桌球 如果盒子只有乙個兵乓球,乙個人拿的話,其他人就拿不到了 這就是原子性,桌...