pthraed에서 해당 쓰레드가 현재 생성되었는지에 대한 여부를 어떻게 알수있을까요?

콩수니의 이미지

안녕하세요
pthread를 이용해서 다중 처리 서버를 구현하는데요

하나의 클라이언트에 대해서 하나의 쓰레드를 주어서 작업을 진행하려고합니다
생성할수있는 쓰레드를 한정을 두어서 관리하려고 하는데요

그래서 쓰레드를 배열로 생성하고 클라이언트 요청시 쓰레드 하나를 주는데 소켓이 끊어지면
자동으로 쓰레드를 종료 시키고 다른 클라이언트에게 할당 대기를 하려고합니다.

그럴려면 해당 쓰레드가 현재 생성되어 작업을 수행중인지에 대한 여부를 알아야 하는데요
관련함수를 찾아보는데 열심히 찾아봤는데 없는건지. 안보이는건지 아닌 다른 방법으로 해결해야 하는지
조언 부탁드립니다!

익명 사용자의 이미지

우선, 말이 좀 애매합니다. 하나의 클라이언트가 accept되면 client당 하나의 thread에서 처리한 다는 것은 이해하겠습니다.

그 뒤에 socket이 끊어지면 thread를 종료시키고 다른 클라이언트에게 할당 대기를 한다는 것이!! 연결만 종료시키는 것이지 thread를 종료시키는 것은 아니지요... 즉, 다시 thread pool로 돌아가 다른 클라이언트의 accept를 기다린 다는 것이지요. 즉, thread를 종료시키지 말아야 합니다. 왜냐하면 thread pool을 만드는 이유가 thread pool 생성 및 종료에 대한 overhead가 있기 때문에 thread들을 미리 만들어 놓고, 빠르게 동작시키려는 것이지요. thread pool을 만드는 방법은 지천에 깔려 있습니다. 아래 예제가 적당할 듯 한데, 한번 참고해 보세요.

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Advanced/ThreadPool

콩수니의 이미지

글을 읽어 보니깐 제말이 그런 오해를 살수있군요!
그렇다고 다시 설명하기에는 힘들꺼같고 어쨋든 써주신 쓰레드 풀 이 제가 찾던 해결방법인것같습니다
저에 검색 능력을 탓해야 하나요 joinc에도 여러번 검색하고 살펴보았는데ㅠ
아무튼 쓰레드풀 정보 감사합니다.!

devband

익명 사용자의 이미지

엄밀히 말하자면, pthread_create()가 0을 리턴하는것만으로도
thread객체가 생성됐다고 정의할수 있습니다.

여기서 생성이라는 말이, context-switch가 일어나고, 해당 쓰레드가 OS의 scheduler에 의해
실행 context로 넘어갔다는 것을 의마하는것은 아닙니다.

쉽게말하자면, 생성됐다는말이, 실제로 실행되어졌다는것을 의미하지는 않습니다.( 실행 1번 됐을수도 있고, 이미 100번은 실행됐을수도 있고, 아예 안됐을수도 있고..그거야 운영체제의 프로세스 스케줄러가 담당하는 부분이죠. )

따라서, 여러 쓰레드간에 데이터를 교환하고, 실행 순서를 컨트롤하기위해
mutex와 conditional variable을 쓰는겁니다.

https://computing.llnl.gov/tutorials/pthreads/

위 문서에 mutex, conditional variable에 대한 설명이 예제와 함께 잘 나와있으니
읽어보고 적용해보세요.

댓글 달기

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