コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2023年11月21日 >>> 2023年11月12日
link もっと後

2023年11月21日

musl libcのアトミックCAS実装

目次: C言語とlibc - まとめリンク

OSSのlibc実装の一つであるmusl libcのアトミックCAS(Compare And Swap)の実装を調べたメモです。CASはa_cas(p, t, s)関数に実装されていて、ポインタpの指す先の値がtなら、アトミックにsと入れ替える関数です。調べるのはRISC-V用の実装です。

コンパイラが提供するアトミック関数実装(stdatomic.h)は使わないみたいです。musl libc独自の実装となっています。

musl libcのアトミックCAS実装

// musl/arch/riscv64/atomic_arch.h

#define a_cas a_cas
static inline int a_cas(volatile int *p, int t, int s)
{
	int old, tmp;
	__asm__ __volatile__ (
		"\n1:   lr.w.aqrl %0, (%2)\n"
		"       bne %0, %3, 1f\n"
		"       sc.w.aqrl %1, %4, (%2)\n"
		"       bnez %1, 1b\n"
		"1:"
		: "=&r"(old), "=&r"(tmp)
		: "r"(p), "r"((long)t), "r"((long)s)
		: "memory");
	return old;
}

RISC-V向けの実装はLR/SC(Load and Reserve, Store Conditional)という仕組みを使い実装されています。RISC-V以外のアーキテクチャでも良く見かける機能で、見たことある方も多いと思います。LRはLL(Load Link)という名前のこともあるようです。

コードはたった4行です、1行ずついきましょう。

  • 1行目: pの指す先を予約付きロードします。ロードした値は変数oldに格納されます。
  • 2行目: ロードした値がtでなければ終了します。
  • 3行目: ロードした値がtならばpの指す先にsを条件付きストアします。
  • 4行目: 条件付きストアが成功したら終了、失敗したら1行目に戻ります。

条件付きストアは、予約付きロードから条件付きストア間にpの指す先を誰も変更していない場合のみストアが成功します。pの指す先の値がsに変化します(tmpには0が返されます)。

もし予約付きロードから条件付きストアの間に誰かがpの指す先を変更していた場合はストアが失敗します。pの指す先の値は変化しません(tmpには0以外の値が返されます)。

編集者:すずき(2023/11/25 03:33)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2023年11月13日

ソフトバンクの料金

目次: プロバイダ - まとめリンク

ドコモからソフトバンクに乗り換えて2か月ほど経ちました。2人暮らしで携帯2台+光回線1回線の総支払額は8,916円です。

以前は15,000円近かったから、だいぶお安くなったと思います。今まで高かった理由が「奥さんの携帯をiPhone初期のクソ高プランのまま放置してたから」なので、最近のお得系プランであればソフトバンクでもauでもなんでも良かったのかも。

ざっくり計算だとahamo x2台+ドコモ光Aプラン(2,970円 x2 + 4,300円 = 10,240円かな?)からの移行だとしても、それなりに嬉しいお値段になっているようです。まあその辺は当然考えられていますよね。

携帯電話回線

Y!mobileは安いです(光とのセット割で1,900円+税)1人2,100円くらいですね。初期のiPhoneのデータ通信価格(月額5,000円以上だったはず)と比べると格段に安いです。ahamoと比較しても数百円安くてありがたいですね。

通信の品質は値段相応の品質です。一番気になる点というと、大規模な駅など人口密集地に移動したときデータ通信が急激に遅くなったり止まったりすることです。不都合というほどではないけれど、露骨に遅くなるor止まるので気になります。

光回線

ソフトバンク光の料金はドコモ光と比べて400円くらい上がって(月額3,800+500円+税 = 4,730円、ドコモ光は4,300円)います。

単体で見ると損ですが、携帯回線とのセット割が1,000円くらいなので取り返せる仕組みです。通信会社ってのはなんでこう複雑で理解しにくい制度を考えるんでしょうね。昔からの悪癖ですね……。

通信の品質は特に変わった印象はありません。たぶん。

編集者:すずき(2023/11/15 16:36)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2023年11月21日 >>> 2023年11月12日
link もっと後

管理用メニュー

link 記事を新規作成

<2023>
<<<11>>>
---1234
567891011
12131415161718
19202122232425
2627282930--

最近のコメント20件

  • link 23年11月29日
    すずきさん (12/04 00:38)
    「あ、そうか。1nsですね。ありがとうござ...」
  • link 23年11月29日
    hdkさん (12/03 18:49)
    「>(本来1usなのに1msになって...」
  • link 23年11月29日
    すずきさん (12/03 00:35)
    「大山先生、お久しぶりです。コメントありが...」
  • link 23年11月29日
    大山恵弘さん (12/02 18:53)
    「すずきさんのX(旧Twitter)へのポ...」
  • link 20年7月12日
    すずきさん (10/19 11:17)
    「ご指摘ありがとうございます。9月の編集は...」
  • link 20年7月12日
    通り縋りさん (10/18 19:08)
    「上の記事2023年9月編集という事ですが...」
  • link 23年9月22日
    すずきさん (09/23 21:14)
    「そうなんですよ。賢いなーと思って自分でも...」
  • link 23年9月22日
    hdkさん (09/23 14:56)
    「+1だから、繰り上がる時は必ず下のほうに...」
  • link 23年9月2日
    すずきさん (09/06 18:21)
    「dアカウント自体はMNPと関係なく存在す...」
  • link 23年9月2日
    hdkさん (09/04 21:00)
    「"dアカウント"とやらがあるかないかで変...」
  • link 23年9月2日
    すずきさん (09/04 10:49)
    「この辺を見ると、MNPしても使えそうなの...」
  • link 23年9月2日
    hdkさん (09/04 09:27)
    「上のは逆パターン (他からahamo) ...」
  • link 23年9月2日
    hdkさん (09/04 09:23)
    「https://service.smt....」
  • link 20年6月29日
    すずきさん (08/10 00:51)
    「何の数字なのか結局よくわからなかったです...」
  • link 20年6月29日
    s16223さん (08/08 23:06)
    「うちの8250Uもベースクロックが1.8...」
  • link 23年7月20日
    すずきさん (07/23 17:10)
    「x86はもちろん、先代であるMIPSにさ...」
  • link 23年7月20日
    hdkさん (07/21 22:45)
    「x86脳なので、mov %eax,%ea...」
  • link 23年7月8日
    すずきさん (07/10 11:22)
    「ISO-2022-JP の独自改変は詳し...」
  • link 23年7月8日
    hdkさん (07/10 08:35)
    「ISO-2022-JPでもJIS X 0...」
  • link 23年6月13日
    すずきさん (06/14 14:23)
    「私はあまりカスタマイズしていない(SSH...」

最近の記事3件

  • link 23年12月2日
    すずき (12/04 03:49)
    「musl libcのpthread_barrier_wait...」
  • link 22年4月13日
    すずき (12/04 03:34)
    「C言語とlibc - まとめリンク目次: C言語とlibc ...」
  • link 23年12月1日
    すずき (12/04 02:43)
    「musl libcのpthread_barrier_wait...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDFファイル RSS 1.0

最終更新: 12/04 03:49