[질문] Linux나 Solaris에서 pthread_mutex 갯수 제한!!??

hohory의 이미지

Linux나 Solaris에서 pthread_mutex를 이용하려 하는데요..

하나의 프로그램에서 만들수 있는 pthread_mutex 갯수 제한이 있는지요?

file descriptor같은 경우 너무 많은 파일이 동시에 열리면,

에러가 나는것처럼, mutext도 동시에 너무 많은 갯수의 것이 이용되고 있으면

에러가 나는지 궁금합니다.

현재 개발중인 프로그램에서 mutex를 하나의 프로세스에서 1만개 정도 열려고합니다.

시스템은 Solaris 9이고, Linux로 포팅되기도 합니다.

고수님들의 고견 부탁드립니다.

수고하세요~

prether의 이미지

솔라리스는 모르겠지만
리눅스환경에서는(특이한 thread library를 안쓴다면)
자신의 원하는 수만큼의 pthread_mutex_t타입 변수를 정의할 수 있는 만큼
메모리가 크면 얼마든지 사용할 수 있습니다.

물론 너무 많이 메모리 사용량이 커져서 프로세스 크기 제한에 걸리지만 않는다면요...

/***************************************
Being the one is just like being in love.
***************************************/

코퍼스의 이미지

어.. 쓰레드쪽은 잘 모르겠지만 일반적으로 시스템 콜에서 리소스를 사용할 때는 어느정도 제한값이 다 있는것으로 알고 있는데요..
이런 경우 시스템 제한 값과 프로세스당 제한 값이 나뉘어지겠지만요..
그래서 위 글을 보고 헤더 화일을 뒤져보니..
(리눅스 레드헷 9입니다)
/usr/include/bits/local_lim.h
에 보니 _POSIX_THREAD_THREADS_MAX는 즉 프로세스당 스레드 개수는 64개로 제한되 있는것 같습니다.
그 아래에 UNDEF 되어 있는 PTHREAD_THREADS_MAX 를 보니 시스템 전체에 대한 제한은 없는것 같구요..

이걸 보면 제 추측이 맞을 것 같은데요..
그리고 솔라리스에도 당연히 어떤 제한값이 있을 것으로 생각됩니다.

PTHREAD_MAX_THREADS
ls -al 'happy' | grep 'possible'

A few Good Man

김성진의 이미지

pthread_mutex의 경우에는 제한이 없다고 판단이 됩니다.
(제가 소스를 보지는 않았습니다만)

왜냐하면, 어떤 프로그램에서 int 변수의 갯수가 제한이 있지 않는 것과 마찬가지

이기 때문입니다.

semaphore같은 자원은 커널에서 관리되고, 사용하는 프로세스에서

시스템 콜을 경유하기 때문에 자원에 대한 제한을 가하는 것이

타당합니다.

그러나, phread_mutex의 경우에는 일반적으로 변수 한두개 정도(CAS op를 위한)

가 모두입니다.

예외적으로 이 mutex에서 Thread간의 경합으로 인해 waiting이 발생하게 되면,

그때 system call이 발생하게 되는데, 이러한 형태의 동작이면

굳이 제한을 둘 필요가 없어 보입니다.

그냥 상식선에서 생각해 보았습니다.

참고로, 제가 개발하는 제품에서 pthread_mutex가 천개가 넘습니다만,

이것으로 제한이 걸린 적은 없습니다.

linux, sun, solaris, windows, aix, dec, vxworks, wince 와 같은 환경에

포팅이 되어있습니다.

참고하시길.

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

고도의 추상화, 극도의 구체화, 에디슨을 그리워하다.

익명 사용자의 이미지

cat /proc/sys/kernel/threads-max 로 확인가능합니다.
linux에서는 프로세스 구분없이 시스템상의 전체수 제한입니다.
echo 수 > 상기 로 수정가능하구요.

suninno의 이미지

cat /proc/sys/kernel/threads-max 로 확인가능합니다.
linux에서는 프로세스 구분없이 시스템상의 전체수 제한입니다.
echo 수 > 상기 로 수정가능하구요.

댓글 달기

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