쓰레드 조건변수에 대해서

baewood의 이미지

쓰레드를 이용하여서 리눅스 환경에서 코딩을 하려고 합니다

그런데 trylock을 쓸지 조건변수를 이용해서 쓸지 고민하다가 조건변수를 이용해서 쓰기로 결정하였습니다.

그러나!!! 코딩을 하다 보니깐 작은 문제가 있어서 올립니다.

제 프로그램을 간단히 설명하자면은 main함수 외에 두개의 쓰레드가 있습니다.

하나는 소켓에서 Client로 소켓을 열고 서버에 접속하여 DATA를 기다립니다.

그러다가 DATA가 들어왔을때 조건에 맞는 DATA가 들어오면은 어떤 A라는 쓰레드를 signal을 보내서 깨우려고 합니다.

여기서 문제는!!!

이 소켓 쓰레드는 계속 돌면서 DATA를 받고 조건에 맞게 다시 A라는 쓰레드를 호출할 것인지 아닌지를 판단해 주어야 합니다.

그래서 해결책으로 이 A 쓰레드에다가 일정한 루프를 돈 다음에 소켓 쓰레드를 깨우게 signal을 보내려고 합니다.

그러면 소켓쓰레드에서 wait하다가 signal을 인지하면 DATA가 들어왔는지 들어왔으면 조건이 맞는지를 확인하려고 합니다.

이런식으로 코딩을 하려고 하는데 제가 보기에는 조건변수가 2개가 필요할 거 같습니다.

그러면 선언을 해줄때

pthread_cond_t thread_cond_DAC = PTHREAD_COND_INITIALIZER;<- A 쓰레드를 깨울 조건변수

pthread_cond_t thread_cond_Socket = PTHREAD_COND_INITIALIZER;<- 소켓쓰레드를 깨울 조건변수

선언해주고

대기할떄는

pthread_cond_wait(&thread_cond_DAC, &mutex)

이렇게 해주고

signal을 보낼때는

pthread_cond_signal(&thread_cond_DAC, &mutex)

<일단 socket은 생략하였습니다,.>

이런식으로 해주어야 하는지..

제가 생각한 것이 맞는지 알고 싶어서 질문을 올립니다.ㅠㅠ

답변부탁드립니다.ㅠㅠㅠ



댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.