Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

barrier는 무엇인가요? #22

Open
youn9k opened this issue Jan 4, 2025 · 3 comments
Open

barrier는 무엇인가요? #22

youn9k opened this issue Jan 4, 2025 · 3 comments

Comments

@youn9k
Copy link
Collaborator

youn9k commented Jan 4, 2025

  • Concurrent queue에서 특정 Task의 직렬화를 위해
  • race condition, thread-safe를 위함
  • 읽고 쓰는 상황에서 적절한 예시
@hsw1920
Copy link
Owner

hsw1920 commented Jan 9, 2025

barrier는 GCD의 Concurrent Queue인 Global Queue의 flags에 설정할 수 있는 값으로,
Concurrent Queue가 사용하는 여러 thread에서 실행을 위한 하나의 스레드를 제외하고 다른 모든 스레드의 사용을 막아 thread-safe를 구현하기 위해 사용됩니다.

Concurrent Queue에 barrier를 추가하면, queue는 이전에 제출한 모든 작업의 실행을 마칠 때 까지 barrier block의 실행을 지연시킨 후 그 작업들이 끝나면 barrier block을 자체적으로 실행하는 것으로 동작합니다.

barrier를 통해 경쟁 상황(Race Condition)을 예방할 수 있고 공유자원에 대한 동시접근을 통해 일어날 수 있는 문제를 회피할 수 있습니다.

@0Hooni
Copy link
Collaborator

0Hooni commented Jan 10, 2025

Barrier는 GCD에서 제공하는 동시성 프로그래밍 도구로, 병렬 디스패치 큐에서 특정 작업을 직렬화하여 안전하게 실행할 수 있도록 도와줍니다.

주로 여러 스레드가 동시에 데이터를 읽고 쓸 때 배리어를 사용하여 안전하게 작업이 실행되는 동안 다른 작업이 해당 데이터에 접근하는 것을 막아줄 수 있어 데이터의 무결성과 스레드의 안전성을 보장해줄 수 있습니다.

예를 들어서 캐시 업데이트를 하는 경우에 캐시 데이터의 쓰기 작업을 할 때 배리어를 걸어준다면 해당 캐시가 변경되는 동안 데이터의 무결성을 보장해주며, 스레드의 안전성을 확보해줄 수 있습니다.

@Kiyoung-Kim-57
Copy link
Collaborator

barrier는 Concurrent 큐에서 경쟁 상태를 해결하고 thread-safe한 코드를 위해 사용할 수 있는 도구이다.
barrier는 작업 큐에서 앞선 작업들이 완료될 때까지 기다렸다가 barrier block 내에서는 직렬적으로 작업을 수행합니다. barrier block의 작업이 끝나면 작업 큐의 나머지 작업을 진행합니다.

concurrent 큐에서 barrier를 사용하는 방법이 있다면 Serial 큐에서는 sync(동기) 방식을 채택하는 것으로 경쟁 상태를 방지할 수 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants