스레드 시간별 동기화에 대해 질문 있습니다.

freeman3의 이미지

어제 글 올렸었는데 계속 헤딩중이라 답답한 마음에 다시 한번 올립니다. 혹시 도움주실 수 있는 분중 못 읽으셨을까봐요 ^^;

그동안 스레드 동기화(스케쥴링?) 없이 프로그램을 짜오다가 이번에는 스레드사이에 정확히 스케쥴링이 필요하게 되었습니다. 각종 pthread관련 스케쥴링 함수들과 nice, 타이머 함수들을 찾아보았지만.. 어느것 하나 확실히 할 수 있는게 없네요. 제가 하려는 것은 예를 들어 1초중 0.3초 정도는 2개의 스레드가 동작하고 0.5 초는 다른 스레드 3개가 0.2초는 또 다른 스레드 2개를 작동시키려고 합니다. 정확히 시간을 나누어서요..
며칠째 코딩은 커녕 함수만 찾아 다니고 머리속에서만 헤딩중이네요;;
어떤 좋은 API를 아시거나 이런 작업을 해보신 분의 도움을 기다리겠습니다 ^^

pynoos의 이미지

thread 가 다른 thread의 time slice를 조절해주며 정교한 스케쥴링 할 수 있을 것 같지는 않습니다.

thread 를 잠시 멈추었다 다시 풀었다하는 함수가 없다는 것이 가장 큰 어려움이 겠지요.

그나마 근사한 방법은 signal을 받아서 현재 작업을 중단하고 점프하는 방법이 나을것 같은데, 그것도 정확히 어떤 thread가 signal을 받을지 조절할 수 없는 난점이 있습니다.

생각나는 것은...

1. process 모델로 고치고, scheduling process를 두어 주기적으로 SIGUSR1 같은 signal을 해당 프로세스들에 던진다.
2. thread 모델로 하되, 곳곳에 sched_yield 와 usleep을 두어 context change가 많이 일어 나도록하고, 자체적으로 scheduling 관리하는 thread를 만들어 thread마다 usleep 값을 조절하도록한다.

freeman3의 이미지

음.. 제가 실력이 모자른 것을 떠나서도 쉬운 작업이 아닌가 보군요.
솔라리스 스레드에는 thr_suspend, thr_continue API라도 있던데요.(안정적이진 않다고 책에 나와 있더군요.) pthread 에서는 스레드를 잠시 멈추었다가 다시 작업하는 API도 없네요.
pynoos 님의 말씀하신 2가지 방법과 다른 방법을 잘 생각해 봐야 겠네요.
답변 감사드립니다 :wink:

댓글 달기

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