멀티 프로세서에 관한 질문

mastercho의 이미지

제가 만든 클래스의 내부 동기화를 위해 멤버 변수를 뮤텍스 자동변수[일반 변수]로 선언하고 사용하는데

어떤분이

다중 프로세스에서는 여러 CPU가 동시에 프로세스의 쓰레드들에 접근해 돌아갈수 있기때문

어떤분은 뮤텍스 변수를 volatile[키워드] 로 쓰라고 하시더군요

물론 뮤텍스 자동변수가 한 CPU레지스터 안에서 돌때는, 다른 CPU가 자동 변수 뮤텍스에 접근하게 될때 메모리에 두고 변수를 수정한게 아니기때문에
제대로 상호배제가 안될수도 있을거 같긴하지만

제프리 리처[윈도우의 대가] 윈도우 NT급에서 프로세스당 CPU는 하나 이상 할당 되지 않는 방식으로 구동된다고 본거 같거든요

따라서 저런문제가 발생하지 않을듯 싶고

물론 윈도우NT가 아닌 운영체제에서는 문제가 될수도 있겠고 해서

헷갈리는데요

다중 프로세서의 CPU 스케줄링 정책을 명확히 아시는분이나

이경우에서의 volatile 키워드 사용에 대해 아시는분은 답변 좀 부탁드립니다

익명 사용자의 이미지

int a;
volatile int b;

이 두가지의 차이점은 최적화 옵션 0일때는 나타나지 않습니다.

하지만 최적화 옵션이 높아지면 높아질수록 이것은 상반된 영역을 사용할수

있습니다.

volatile은 이러한 최적화 옵션을 무시하라고 권고하는 겁니다.

즉, 최적화 0인것과 같이 행동해달라고 요청하는거죠.

여기서 a변수의 경우는 경우에 따라서 메모리에 곧바로 적용되지 못하고

Register안에서만 노는 경우가 충분히 생길수 있습니다.

반면에 b의 경우는 최적화에 의해서 레지스터를 경유하지 못하도록

최대한 컴파일러가 회피를 하도록 컴파일 정책이 적용됩니다.

하지만 최적화 옵션 몇 이상부터는 이것또한 무시될수 있다고

그러더군요. 저도 이건 확인 안해본 사항이니까 따로 확인해보세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.