현재 실행중인 쓰레드는 어떻게 알아여?

익명 사용자의 이미지

안녕하세요..

pthread_t thread[10];

그리구 서버소켓이 대기하구 있습니다.
서버에 클라이언트가 접속할때마다 쓰레드 하나 생성해서 작업을 하구
쓰레드 종료 시킬려구 하거든요.. 근데..

thread[0]이 현재 실행중인지 아니면 대기중인지 알고싶다면 어떻게 해야
하나요?
클라이언트 접속하면 현재 실행중이 아닌 쓰레드를 이용할려구 하거든요.

for(i = 0; i < 10; i++)
{
if(!thread[i]가 실행중)
{
pthread_create(thread[i]~~~~~)
}
}

이런식으로 할려구 하거든요.. ㅡ.ㅡ 부탁드립니다.

익명 사용자의 이미지


pthread_t의 타입 정의를 보면

/usr/include/bits/pthreadtypes.h
typedef unsigned long int pthread_t

와 같이 unsigned long int 를 typedef한 형태입니다.

pthread_t[10]이라고 한것은 결국 unsigned long int [10]과
동일하겠죠...

쓰레드 작업을 시작하기 전에,pthread_t[10] 배열값을
모두 0으로 셋팅하고,
쓰레드를 만들때는 pthread_t[10]배열을 뒤져서 값이 0은 것에다가
할당 하면 되겠죠. 만약pthread_t[3]에 할당이 되었다면
pthread_t[3]의 값은 0이 아닌 쓰레드 id값일테고,,
그러면 3번 배열은 다음번 쓰레드가 사용될때 쓰이지 않겠죠..
3번 쓰레드는 작업이 종료되면 다시 이것을 0으로 셋팅해서
다른 쓰레드가 사용되도록 하면 될듯 싶네요..

여기가까지가 질문에 답변이고

제가 생각하는 더 나은 방법은...
첫번째 그냥 접속이 들어 오는데로 쓰레드를 생성하고,
바로 pthread_detach시켜서 종료 시켜 버리는 방법을 취하는게 더
좋을듯 싶네요.
님께서 생각하는 방법은 동시에 정적인 배열 사이즈 만큼만
수용을 하니까 한계가 있습니다.

아니면,,,
쓰레드 풀을 구현을 하는 방법이 있는데,
요청이 들어 오면 큐에 저장을 하고
큐의 뒷단에 일정 수량의 쓰레드를 띄워두고
큐에 작업이 있으면 작업 쓰레드들이 이것을 퍼가는 방법이
있겠죠..

Pthreads Programming란 책을 보시면
쓰레드 풀구성에 관한 예제가 있습니다.

http//www.ezdoum.com/stories.php?story=02/05/09/0348890

책의 예제파일이 첨부화일도 등록되어 있으니,
참고 하시면 될듯 하네요..

ps. 쓰레드 공부하기에 좋은 책입니다.

익명 사용자의 이미지

답변 넘 감사드립니다...
움.. 그런 방법이 있었군요.. 어찌나.. 머리가 안돌아가는지..
너무 감사드리구여.. 고민하던거 해결되니까.. 기분이좋네여..

행복하세요~~~

익명 사용자의 이미지

음 쓰레드 이야기가 나온김에, 제가 참고로 하는
쓰레드 프로그래밍 정보를 한자리로 모았습니다.;;

멀티쓰레드(Pthread) 프로그래밍
http//www.ezdoum.com/stories.php?story=02/05/09/5651994

참 pthread_t[]는 동시에 접근하는 컨텍스트가 많으니
잠금이 필요하겠죠 ^^

윗글을 수정하고 싶은데, 패스워드가 --;

댓글 달기

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