以C中的对象为例:
/* object.h */
typedef struct Object Object;
Object* createObject();
void freeObject(Object* object);
int getObjectNumber(Object* object);
void incrementObjectNumber(Object* object);
Run Code Online (Sandbox Code Playgroud)
这是一种非常简单的不透明类型,它存储一个数字并可以递增。
为了使我的代码线程安全,我有两个选择。第一种是在对象中存储互斥量:
void
func(Object* object)
{
incrementObject(object);
}
int
main()
{
Object* object = createObject();
Thread thread1 = startThread(func, object);
Thread thread2 = startThread(func, object);
waitThread(thread1);
waitThread(thread2);
freeObject(object);
}
Run Code Online (Sandbox Code Playgroud)
第二种是将互斥锁存储在main中:
void
func(Object* object, Mutex mutex)
{
lockMutex(mutex);
incrementObject(object);
unlockMutex(mutex);
}
int
main()
{
Object* object = createObject();
Mutex mutex;
Thread thread1 = startThread(func, object, mutex);
Thread thread2 = startThread(func, object, mutex); …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
from tkinter import *
def command(d):
print(d)
a = Tk()
b = []
for c in range(0, 5):
b.append(Button(a, text=c, command=lambda: command(c)))
b[c].pack()
a.mainloop()
Run Code Online (Sandbox Code Playgroud)
运行脚本时,按钮全部打印4,而我希望它们打印显示在它们上面的数字.你怎么能这样做?
我使用的是Python 3.4