멀티 쓰래딩 프로그래밍에서 함수를 각 파일에 알맞게 배치하는

ssif의 이미지

뮤텍스를 이용한 동기화를 통해 다중쓰래드 프로그래밍을 하고 있습니다.현재 콘솔 환경에서만 실행이 되게끔 작성 되어 있고 차후 gui를 포함 하려고 합니다.현재 고민중인 문제는 다중쓰래드를 생성할경우 main() 가 있는 파일의 코드량이 급격이 늘어 난다는 점입니다.물론 몇몇 작성한 함수는 다른 파일로 나누어 쓰래드 작업 내용 일부분에 포함 되긴 했습니다.그러나 만들려는 쓰래드의 갯수가 현재 2개인데 5개 정도로 늘어날 경우 main()이 있는 파일의 소스코드량만 늘어나게 됩니다.

다중쓰래드 프로그래밍 할 때 쓰래드 관련 함수들을 다른 파일에서 작성하고 싶습니다.즉 함수들을 적절히 다른 파일들로 분산시키고 싶습니다.물론 다중 쓰래드는 잘 동작 하도록 하려고 합니다.

#ifndef __fuct_h__
#define __fuct_h__

형식으로 파일을 나눌경우 전역 함수를 둘수 없어 보입니다.어떤식으로 코드를 작성해야 할까요?

현재 작성한 프로그램은 실행은 됩니다만,main() 함수가 있는 파일에 2/3정도의 코드량이 몰려 있습니다.적절하게 이 쓰래드 관련 함수들을 다른 파일로 분산 시키고 싶은데 참고할 만한 코드는 없는지요?많은 훈련을 통해 습득할 수 도 있지만,막상 현재 어떻게 해야 할지 아이디어가 떠오르지 않습니다.

win32 와 c언어를 사용하고 있습니다.

미리 감사드립니다.

darkorb의 이미지

음, 멀티쓰레드 환경이라고 해서 특별히 틀릴것은 없지않나요?
A.cpp 파일에

void test( void )
{
    ....
}

이런 함수가 있으면

b.cpp 파일에서 이런 함수를 사용할 때

b.h파일에
extern void test( void );
라고만 써주면 되지 않나요?

익명 사용자의 이미지

이 문제는 다중쓰레드 문제가 아니며, darkorb님이 말씀하신대로의 문제입니다.

쓰레드 함수는 위처럼하면되고,
다중쓰레드간에 공유메모리(이름은 좀 거창하지만, 글로벌변수)를 파일간에
공유하는 방법론 정도면 충분하겠습니다.

메인에서
int i;
그외 참조하는 곳에서
extern int i;

이 정도면 되겠군요.

ssif의 이미지

답글을 달아주신 두분께 감사드립니다.제가 생각이 짧았습니다.그 부분까지는 생각을 못하고 있었습니다.단순히 전역변수만을 염두하다보니 생각이 미치지못했습니다.다시한번 감사드립니다.

봄들판에서다

댓글 달기

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