kernel/data_structures/spsc_lockfree.html · kernel/data_structures/spsc_lockfree.rst 공식 원문 ↗

Zephyr 3.7.0 · Kernel · Data Structures

SPSC Lock-free Queue

하나의 producer와 하나의 consumer 사이에서 element를 acquire·produce·consume·release합니다.

Official pathkernel/data_structures/spsc_lockfree.html
Source filekernel/data_structures/spsc_lockfree.rst
Source versionZephyr 3.7.0
TranslationFull · reviewed

본문 기준: Zephyr 3.7.0 LTS3 · 이후 유지보수 패치는 별도입니다.

Part 1

요약·해설

SPSC는 2의 거듭제곱 크기 ring buffer를 사용하고, 생산과 소비를 여러 단계로 나누어 batch 처리할 수 있습니다.

Producer

Single

Consumer

Single

Storage

Atomic ring buffer

Part 2

접을 수 있는 영어 원문 전체

영어 원문 전체 펼치기
원문 SHA-256 831F6BEDC7459CD4A68499D3E4422B7B669C17A388DEB6508C7B805F65234A9E
.. _spsc_lockfree:

Single Producer Single Consumer Lock Free Queue
===============================================

A :dfn:`Single Producer Single Consumer Lock Free Queue (SPSC)` is a lock free
atomic ring buffer based queue.

API Reference
*************

.. doxygengroup:: spsc_lockfree

Part 3

한국어 전문 번역

SPSC(Single Producer Single Consumer Lock Free Queue)는 lock-free atomic ring buffer 기반 queue입니다.

API 참고

API group spsc_lockfree은 하나의 producer와 하나의 consumer를 위한 SPSC lock-free queue API입니다.

매크로와 정의

SPSC_INITIALIZER(sz, buf)

SPSC를 정적으로 초기화합니다.

매개변수

  • sz: SPSC 크기이며 2, 4, 8처럼 2의 거듭제곱이어야 합니다.
  • buf: buffer pointer
SPSC_DECLARE(name, type)

SPSC를 위한 익명 구조체 형식을 선언합니다.

매개변수

  • name: 제공할 SPSC symbol 이름
  • type: SPSC에 저장할 형식
SPSC_DEFINE(name, type, sz)

고정 크기 SPSC를 정의합니다.

매개변수

  • name: 제공할 SPSC symbol 이름
  • type: SPSC에 저장할 형식
  • sz: SPSC 크기이며 2의 거듭제곱이어야 합니다.
spsc_size(spsc)

SPSC queue의 크기를 얻습니다.

매개변수

  • spsc: SPSC reference
spsc_reset(spsc)

SPSC가 비도록 초기화하거나 reset합니다. ISR이나 thread처럼 여러 호출 context에서 producer/consumer가 사용 중일 때 실행하는 것은 안전하지 않습니다.

매개변수

  • spsc: 초기화하거나 reset할 SPSC
spsc_acquire(spsc)

SPSC에서 생산할 element 하나를 확보합니다.

매개변수

  • spsc: 생산용 element를 확보할 SPSC

반환값: 확보한 element의 pointer를 반환하며 SPSC가 가득 차 있으면 NULL을 반환합니다.

spsc_produce(spsc)

앞서 확보한 element 하나를 SPSC에 생산하여 consumer가 즉시 사용할 수 있게 합니다.

매개변수

  • spsc: 앞서 확보한 element를 생산할 SPSC. 대상이 없으면 아무 작업도 하지 않습니다.
spsc_produce_all(spsc)

앞서 확보한 모든 element를 생산하여 consumer가 즉시 사용할 수 있게 합니다.

매개변수

  • spsc: 확보한 element 전체를 생산할 SPSC. 대상이 없으면 아무 작업도 하지 않습니다.
spsc_drop_all(spsc)

앞서 확보한 모든 element를 버려 다시 확보할 수 있게 합니다.

매개변수

  • spsc: 확보한 element 전체를 버릴 SPSC. 대상이 없으면 아무 작업도 하지 않습니다.
spsc_consume(spsc)

SPSC에서 element 하나를 소비합니다.

매개변수

  • spsc: 소비할 SPSC

반환값: Element pointer를 반환하며 소비할 element가 없으면 NULL을 반환합니다.

spsc_release(spsc)

소비한 element 하나를 해제합니다.

매개변수

  • spsc: 소비한 element를 해제할 SPSC. 대상이 없으면 아무 작업도 하지 않습니다.
spsc_release_all(spsc)

소비한 모든 element를 해제합니다.

매개변수

  • spsc: 소비한 element 전체를 해제할 SPSC. 대상이 없으면 아무 작업도 하지 않습니다.
spsc_acquirable(spsc)

SPSC에서 확보 가능한 항목 수를 얻습니다.

매개변수

  • spsc: 항목 수를 조회할 SPSC
spsc_consumable(spsc)

SPSC에서 소비 가능한 항목 수를 얻습니다.

매개변수

  • spsc: 항목 수를 조회할 SPSC
spsc_peek(spsc)

Queue에서 첫 번째 사용 가능 항목을 확인하되 소비하지 않습니다.

매개변수

  • spsc: 확인할 SPSC

반환값: Element pointer를 반환하며 소비할 element가 없으면 NULL을 반환합니다.

spsc_next(spsc, item)

주어진 항목 다음에 있는 queue 항목을 확인합니다.

매개변수

  • spsc: 확인할 SPSC
  • item: queue 안의 항목 pointer

반환값: 다음 element pointer를 반환하며 더 없으면 NULL을 반환합니다.

spsc_prev(spsc, item)

주어진 항목 앞에 있는 queue 항목을 얻습니다.

매개변수

  • spsc: 확인할 SPSC
  • item: queue 안의 항목 pointer

반환값: 이전 element pointer를 반환하며 더 없으면 NULL을 반환합니다.

구조체

struct spsc

공통 SPSC 속성입니다. 경고: 제공되는 macro를 통하지 않고 직접 조작하면 안 됩니다.

Source

출처

영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.