•假设您有一个包含500000个元素的数组(data=[]),并且每个元素都被分配了一个介于1到10之间的随机值(随机.randint(1,10))。在
对于范围内的i(500000): 数据[i]=随机.randint()
•允许用户确定工作线程的数量(N)。用户可以输入1到10之间的值。无效值应导致警告消息,线程计数设置为5。 •找出一种自动将数组划分为N个相等的段的方法,其中N是工作线程的数量(threadCount)。您不能创建子数组来处理这个问题;您必须找到一种基于索引对原始数组进行分区的方法。下面提供了一个提示,假设用户输入的threadCount为4。在
第1段 (125000个元素)第2段 (125000个元素)第3段 (125000个元素)第4段 (125000个元素)
•确定一种生成线程的方法,以便为每个线程分配一个数组段进行操作。这些线程应该为其分配的段创建元素的总和。单线程功能如下:
定义求和(st、end、threadIndex):
其中:st和end表示数组段的起点和终点,index是线程数。在
必须确定锁定机制,以确保程序可以在阵列上并发运行。在
•每个线程完成其工作后,主程序应通过将子和相加并除以数组元素的总数来计算最终平均值。在
最后练习: 你能扩展你的程序,使数组用你的工作线程填充随机数吗?在
我的代码:
import random
import thread
def su(st,end,i):
global subtotal, data, locks
for index in range(st,end+i):
subtotal[i] += data[index]
lock.release()
numth = int(100)
data = list(range(numth))
for index in range(len(data)):
data[index] = random.randint(1,10)
wt=int(input("enter"))
locks = list(range(wt))
subtotal = list(range(wt))
seg = len(data)/wt
st=0
for i in range(wt):
st= i * seg
end = st *seg -1
thread.start_new_thread(su, ())
locks=lock.acquire()
avg = sum(subtotal)/len(data)
print(avg)
您导入的是},请删除下划线。删除
_thread
,而不是{_thread.start_new_thread()
行中的下划线。在一般来说,不要使用以下划线开头的模块,它们是内部实现细节。在
相关问题 更多 >
编程相关推荐