<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94%2FThread</id>
	<title>방울뱀스터디/Thread - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94%2FThread"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94/Thread&amp;action=history"/>
	<updated>2026-05-14T22:08:37Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94/Thread&amp;diff=51971&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:29, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%B0%A9%EC%9A%B8%EB%B1%80%EC%8A%A4%ED%84%B0%EB%94%94/Thread&amp;diff=51971&amp;oldid=prev"/>
		<updated>2021-02-07T05:29:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Thread 의 정의 ==&lt;br /&gt;
쓰레드는 하나의 프로그램(프로세스)안에서 여러가지 일을 동시에 처리해 주는 것을 말합니다. &lt;br /&gt;
쉬운 예로 게임을 할때 배경음악이 나오면서도 캐릭터가 움직이고 배경화면 출력됨. 즉 일이 동시에 처리될 때 각각의 일들을 쓰레드라고 합니다.~~!&lt;br /&gt;
&lt;br /&gt;
참고)&lt;br /&gt;
프로세스(process) : 쓰레드와 비슷하기는 하지만 좀 더 큰 개념을 말하는데, 서로 다른 프로그램이 동시에 처리될 각각의 프로그램을 가리킴니다..&lt;br /&gt;
하나의 프로세스가 여러개의 쓰레드로 이루어 질 수 있는 것입니다. &lt;br /&gt;
&lt;br /&gt;
== Thread 모듈 ==&lt;br /&gt;
쓰레드를 사용하려면 : 쓰레드로 처리할 부분을 함수로 만들어주고 start_new_thread()로 그 함수로 호출하면 됩니다. &lt;br /&gt;
&lt;br /&gt;
=== 예시1 ===&lt;br /&gt;
 import thread&lt;br /&gt;
 i=0&lt;br /&gt;
 j=0&lt;br /&gt;
 def f():&lt;br /&gt;
     global i&lt;br /&gt;
     while 1: i+=1&lt;br /&gt;
 &lt;br /&gt;
 def g():&lt;br /&gt;
     global j&lt;br /&gt;
     while 1: j+=1&lt;br /&gt;
     &lt;br /&gt;
 thread.start_new_thread(f,())&lt;br /&gt;
 thread.start_new_thread(g,())&lt;br /&gt;
 &lt;br /&gt;
 print &amp;#039;i=&amp;#039;,i&lt;br /&gt;
 print &amp;#039;j=&amp;#039;,j&lt;br /&gt;
 print &amp;#039;i=&amp;#039;,i&lt;br /&gt;
 print &amp;#039;j=&amp;#039;,j&lt;br /&gt;
=== 예시2 ===&lt;br /&gt;
 import thread, time&lt;br /&gt;
 &lt;br /&gt;
 def counter(id):&lt;br /&gt;
     for i in range(5):&lt;br /&gt;
         print &amp;#039;id %s --&amp;amp;gt; %s&amp;#039; % (id, i)&lt;br /&gt;
         time.sleep(0.1)&lt;br /&gt;
 &lt;br /&gt;
 for i in range(5):&lt;br /&gt;
     thread.start_new_thread( counter, (i,) )&lt;br /&gt;
                         # 5개의 쓰레드를 독립적으로 각각실행&lt;br /&gt;
 &lt;br /&gt;
 time.sleep(2)           # 잠시대기&lt;br /&gt;
 print &amp;#039;Exiting&amp;#039;&lt;br /&gt;
== 변수의 공유 ==&lt;br /&gt;
* 쓰레드의 좋은 점은 전역 변수를 공유할 수 있다는 점이다. &lt;br /&gt;
   만약 여러 쓰레드가 한 변수를 동시에 변경하려고 할때 문제가 생길 수 있다.&lt;br /&gt;
   값을 갱신하려 하는 중간에 다른 스레드로 교체되면 바르지 못한 정보가 생길경우가 있기 때문이다.&lt;br /&gt;
=== 예3 ===&lt;br /&gt;
 import thread, time&lt;br /&gt;
 g_count = 0&lt;br /&gt;
 &lt;br /&gt;
 def counter(id, count):&lt;br /&gt;
     global g_count&lt;br /&gt;
     for i in range(count):&lt;br /&gt;
         print &amp;#039;id %s -&amp;amp;gt; %s&amp;#039; % (id, i)&lt;br /&gt;
         g_count = g_count +1&lt;br /&gt;
 &lt;br /&gt;
 for i in range(5):&lt;br /&gt;
     thread.start_new_thread(counter,(i,5))&lt;br /&gt;
 &lt;br /&gt;
 time.sleep(3)&lt;br /&gt;
 print &amp;#039;Total Counter =&amp;#039;, g_count&lt;br /&gt;
 print &amp;#039;Exitintg&amp;#039;&lt;br /&gt;
(상호배제)&lt;br /&gt;
이와 같은 문제점을 해결을 위해서 정보를 갱신하는 동안에는 다른 쓰레드가 그변수에 접근하지 못하도록 하는 것이 필요~!&lt;br /&gt;
allow_lock() 함수는 새로운 락 객체를 넘겨준다.(3)&lt;br /&gt;
# thread.acquire() - 락을 얻는다. 일단 하나의 쓰레드가 락을 얻으면 다른 쓰레드는 락을 얻을수 없다.&lt;br /&gt;
# thread.release() - 락을 해제한다. 다른 쓰레드가 이 코드 영역으로 들어갈 수 있는 것을 허락하는 것이다.&lt;br /&gt;
# thread.locked()  - 락을 얻었으면 1, 아니면 0을 리턴.&lt;br /&gt;
----&lt;br /&gt;
lock = thread.allocate_lock() #여기서 얻은 lock는 모든 쓰레드가 공유해야 한다. (-&amp;gt;전역)&lt;br /&gt;
# 쓰레드의 코드수행과정&lt;br /&gt;
lock.acquire() #락을 얻고 들어간다. 이미 다른 쓰레드가 들어가 있으면 락을 얻을때까지 여기서 자동적을 대기.&lt;br /&gt;
g_count = g_count+1  #필요한 코드 수행 &lt;br /&gt;
lock.release() #락을 해제. 다른 쓰레드가 ㅇ코드영역으로 들어갈 수 있도록 허락한다. &lt;br /&gt;
&lt;br /&gt;
=== 예4 ===&lt;br /&gt;
 import thread, time&lt;br /&gt;
 g_count = 0&lt;br /&gt;
 lock = thread.allocate_lock()&lt;br /&gt;
 def counter(id, count):&lt;br /&gt;
     global g_count&lt;br /&gt;
     for i in range(count):&lt;br /&gt;
         print &amp;#039;id %s -&amp;amp;gt; %s&amp;#039; % (id, i)&lt;br /&gt;
         lock.acquire()&lt;br /&gt;
         g_count = g_count +1&lt;br /&gt;
         lock.release()&lt;br /&gt;
 &lt;br /&gt;
 for i in range(5):&lt;br /&gt;
     thread.start_new_thread(counter,(i,5))&lt;br /&gt;
 &lt;br /&gt;
 time.sleep(3)&lt;br /&gt;
 print &amp;#039;Total Counter =&amp;#039;, g_count&lt;br /&gt;
 print &amp;#039;Exitintg&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
 from Tkinter import *&lt;br /&gt;
 import time, thread&lt;br /&gt;
 &lt;br /&gt;
 def CountTime():&lt;br /&gt;
     global i&lt;br /&gt;
     i=0&lt;br /&gt;
     count=0&lt;br /&gt;
     while count&amp;amp;lt;80:&lt;br /&gt;
         text.insert(1.0, i)&lt;br /&gt;
 &lt;br /&gt;
         text.delete(INSERT)&lt;br /&gt;
         #text.update()&lt;br /&gt;
         time.sleep(0.1)&lt;br /&gt;
         count=count+1&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 root = Tk()&lt;br /&gt;
 root.protocol(&amp;quot;WM_DELETE_WINDOW&amp;quot;, exit)&lt;br /&gt;
 text=Text(root, height=1)&lt;br /&gt;
 text.pack()&lt;br /&gt;
 &lt;br /&gt;
 thread.start_new_thread(CountTime,())&lt;br /&gt;
 &lt;br /&gt;
 canvas = Canvas(root, width=400, height=300)&lt;br /&gt;
 canvas.pack()&lt;br /&gt;
 wall = PhotoImage(file=&amp;#039;wall.gif&amp;#039;)&lt;br /&gt;
 canvas.create_image(0, 0, image=wall, anchor=NW)&lt;br /&gt;
 stop=0&lt;br /&gt;
 &lt;br /&gt;
 root.mainloop()&lt;br /&gt;
----&lt;br /&gt;
[[방울뱀스터디]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>