producers

时间:2024-09-21 23:52:37编辑:奇事君

producer是什么意思

producer用作名词(n),常用的意思为“生产者制造商,生产公司(国)”还有一下这些意思:(人或物)造成者,生产者;(电影、广播戏剧、歌剧等的)制片主任,监制人;(音乐录音的)监制人;发生器等等。producer的同义词有generator等,该单词的使用如下:Libya is a major oil producer.利比亚是主要石油生产国之一;In June, producer prices slipped 0.1% from May.六月份,生产商的价格从五月份下降了0.1%。

producer是什么意思

producer的意思:制片人。读音:英[prəˈdjuːsər]、美[prəˈduːsər]。释义:n. 制作人,制片人;生产者;发生器变形:复数 producers。同近义词:generator/produced byn. 制作人,制片人;[劳经][生态]生产者;发生器producer造句如下:1、The movie producer claimed that this movie was terminated by some unspeakable reasons.电影制片人声称这部电影因某些不可告人的原因而被终止。2、Machine producers are recalling problematic machines from the market.机器生产商正从市场上召回有问题的机器。3、The producer of this program is mainly responsible for the whole recording process.这个节目的制作人主要负责整个录制过程。4、He is a successful producer who has produced many famous films.他是一个成功的制片人 制作了许多著名的电影。5、I could tell from the style of directing that the producer also had a hand in directing it.从导演风格上我可以看出,制片人也参与了这部电影的导演工作。

producer的动词

producer的动词是produce,生产; 制造; 引起; 产生; 招致; 出示; 制作; 导演; 播放; 播送; 使(线段)延长复数形式:producers;producer 基本解释producer的近义词名词制片人; 生产者,制造者; 煤气发生炉; 自养有机体producer 同义词名词manufacturerproducerproducer 反义词名词consumerproducer的意思produce的名词是:production。读音:英 [prə’dʌkʃn]释义:n. 成果;产品;生产;作品短语Production Designer 艺术指导 ; 美术指导 ; 制作设计 ; 制片设计师Production Company 制片公司 ; 制作公司 ; 出品公司 ; 制作机构扩展资料:词语用法:n. (名词)1、production作名词的基本意思是“生产,产量”,可指生产的过程或产量,也可指生产的结果,是不可数名词。2、production在表示“产品,作品”这一意义时,一般指人们通过智力、艺术、劳动所生产的作品或产品,尤其指戏剧、电影方面的作品,是可数名词。3、production还可作“出示,提供”解,是不可数名词。4、production可用于另一个名词前作定语。producer: [prəˈdjuːsə(r)] n.制作人;生产商;制造商;产地;(电影的)制片人;监制人;舞台监督;(广播、电视、唱片等的)制作公司;监制

producer动词

producer动词是:produce。produce的知识扩展:produce是英语单词,名词、动词,作名词时意为农产品,产品;作动词时意为生产;引起;创作;生育,繁殖; 生产,创作。1、produce用作动词的基本意思是生产,可指生产一切有形的或无形的东西,引申可作制作,创作解,可用作不及物动词,也可用作及物动词,用作及物动词时,接名词或代词作宾语。2、produce也可作出示,提供; 引起,导致; 出版,上演解,作此解时只用作及物动词,接名词或代词作宾语。3、produce可用于被动结构。4、produce用作名词时是产品的总称,包括农业产品、工业产品和天然产品,但主要是指农产品,是不可数名词。5、produce作主语时其谓语动词用单数形式。

生产者消费者问题:一个共享存储区,三个进程,一个进程写数据,另外两个打印,要求每个数据只打印一次

#include
#include
#include
#include
#include

//定义一些常量;
//本程序允许的最大临界区数;
#define MAX_BUFFER_NUM 10
//秒到微秒的乘法因子;
#define INTE_PER_SEC 1000
//本程序允许的生产和消费线程的总数;
#define MAX_THREAD_NUM 64

//定义一个结构,记录在测试文件中指定的每一个线程的参数
struct ThreadInfo
{
int serial; //线程序列号
char entity; //是P还是C
double delay; //线程延迟
int thread_request[MAX_THREAD_NUM]; //线程请求队列
int n_request; //请求个数
};

//全局变量的定义

//临界区对象的声明,用于管理缓冲区的互斥访问;
CRITICAL_SECTION PC_Critical[MAX_BUFFER_NUM];
int Buffer_Critical[MAX_BUFFER_NUM]; //缓冲区声明,用于存放产品;
HANDLE h_Thread[MAX_THREAD_NUM]; //用于存储每个线程句柄的数组;
ThreadInfo Thread_Info[MAX_THREAD_NUM]; //线程信息数组;
HANDLE empty_semaphore; //一个信号量;
HANDLE h_mutex; //一个互斥量;
DWORD n_Thread = 0; //实际的线程的数目;
DWORD n_Buffer_or_Critical; //实际的缓冲区或者临界区的数目;
HANDLE h_Semaphore[MAX_THREAD_NUM]; //生产者允许消费者开始消费的信号量;

//生产消费及辅助函数的声明
void Produce(void *p);
void Consume(void *p);
bool IfInOtherRequest(int);
int FindProducePositon();
int FindBufferPosition(int);

int main(void)
{
//声明所需变量;
DWORD wait_for_all;
ifstream inFile;

//初始化缓冲区;
for(int i=0;i< MAX_BUFFER_NUM;i++)
Buffer_Critical[i] = -1;
//初始化每个线程的请求队列;
for(int j=0;j<MAX_THREAD_NUM;j++){
for(int k=0;k<MAX_THREAD_NUM;k++)
Thread_Info[j].thread_request[k] = -1;
Thread_Info[j].n_request = 0;
}
//初始化临界区;
for(i =0;i< MAX_BUFFER_NUM;i++)
InitializeCriticalSection(&PC_Critical[i]);

//打开输入文件,按照规定的格式提取线程等信息;
inFile.open("test.txt");
//从文件中获得实际的缓冲区的数目;
inFile >> n_Buffer_or_Critical;
inFile.get();
printf("输入文件是:\n");
//回显获得的缓冲区的数目信息;
printf("%d \n",(int) n_Buffer_or_Critical);
//提取每个线程的信息到相应数据结构中;
while(inFile){
inFile >> Thread_Info[n_Thread].serial;
inFile >> Thread_Info[n_Thread].entity;
inFile >> Thread_Info[n_Thread].delay;
char c;
inFile.get(c);
while(c!='\n'&& !inFile.eof()){
inFile>> Thread_Info[n_Thread].thread_request[Thread_Info[n_Thread].n_request++];
inFile.get(c);
}
n_Thread++;
}

//回显获得的线程信息,便于确认正确性;
for(j=0;j<(int) n_Thread;j++){
int Temp_serial = Thread_Info[j].serial;
char Temp_entity = Thread_Info[j].entity;
double Temp_delay = Thread_Info[j].delay;
printf(" \n thread%2d %c %f ",Temp_serial,Temp_entity,Temp_delay);
int Temp_request = Thread_Info[j].n_request;
for(int k=0;k<Temp_request;k++)
printf(" %d ", Thread_Info[j].thread_request[k]);
cout<<endl;
}
printf("\n\n");

//创建在模拟过程中几个必要的信号量
empty_semaphore=CreateSemaphore(NULL,n_Buffer_or_Critical,n_Buffer_or_Critical,
"semaphore_for_empty");
h_mutex = CreateMutex(NULL,FALSE,"mutex_for_update");

//下面这个循环用线程的ID号来为相应生产线程的产品读写时所
//使用的同步信号量命名;
for(j=0;j<(int)n_Thread;j++){
std::string lp ="semaphore_for_produce_";
int temp =j;
while(temp){
char c = (char)(temp%10);
lp+=c;
temp/=10;
}
h_Semaphore[j+1]=CreateSemaphore(NULL,0,n_Thread,lp.c_str());
}

//创建生产者和消费者线程;
for(i =0;i< (int) n_Thread;i++){
if(Thread_Info[i].entity =='P')
h_Thread[i]= CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Produce),
&(Thread_Info[i]),0,NULL);
else
h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(Consume),
&(Thread_Info[i]),0,NULL);
}

//主程序等待各个线程的动作结束;
wait_for_all = WaitForMultipleObjects(n_Thread,h_Thread,TRUE,-1);
printf(" \n \nALL Producer and consumer have finished their work. \n");
printf("Press any key to quit!\n");
_getch();
return 0;
}

//确认是否还有对同一产品的消费请求未执行;
bool IfInOtherRequest(int req)
{
for(int i=0;i<n_Thread;i++)
for(int j=0;j<Thread_Info[i].n_request;j++)
if(Thread_Info[i].thread_request[j] == req)
return TRUE;

return FALSE;
}

//找出当前可以进行产品生产的空缓冲区位置;
int FindProducePosition()
{
int EmptyPosition;
for (int i =0;i<n_Buffer_or_Critical;i++)
if(Buffer_Critical[i] == -1){
EmptyPosition = i;
//用下面这个特殊值表示本缓冲区正处于被写状态;
Buffer_Critical[i] = -2;
break;
}
return EmptyPosition;
}

//找出当前所需生产者生产的产品的位置;
int FindBufferPosition(int ProPos)
{
int TempPos;
for (int i =0 ;i<n_Buffer_or_Critical;i++)
if(Buffer_Critical[i]==ProPos){
TempPos = i;
break;
}
return TempPos;
}

//生产者进程
void Produce(void *p)
{
//局部变量声明;
DWORD wait_for_semaphore,wait_for_mutex,m_delay;
int m_serial;

//获得本线程的信息;
m_serial = ((ThreadInfo*)(p))->serial;
m_delay = (DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);

Sleep(m_delay);
//开始请求生产
printf("Producer %2d sends the produce require.\n",m_serial);

//确认有空缓冲区可供生产,同时将空位置数empty减1;用于生产者和消费者的同步;
wait_for_semaphore = WaitForSingleObject(empty_semaphore,-1);

//互斥访问下一个可用于生产的空临界区,实现写写互斥;
wait_for_mutex = WaitForSingleObject(h_mutex,-1);
int ProducePos = FindProducePosition();
ReleaseMutex(h_mutex);

//生产者在获得自己的空位置并做上标记后,以下的写操作在生产者之间可以并发;
//核心生产步骤中,程序将生产者的ID作为产品编号放入,方便消费者识别;
printf("Producer %2d begin to produce at position %2d.\n",m_serial,ProducePos);
Buffer_Critical[ProducePos] = m_serial;
printf("Producer %2d finish producing :\n ",m_serial);
printf(" position[ %2d ]:%3d \n" ,ProducePos,Buffer_Critical[ProducePos]);
//使生产者写的缓冲区可以被多个消费者使用,实现读写同步;
ReleaseSemaphore(h_Semaphore[m_serial],n_Thread,NULL);
}

//消费者进程
void Consume(void * p)
{
//局部变量声明;
DWORD wait_for_semaphore,m_delay;
int m_serial,m_requestNum; //消费者的序列号和请求的数目;
int m_thread_request[MAX_THREAD_NUM];//本消费线程的请求队列;

//提取本线程的信息到本地;
m_serial = ((ThreadInfo*)(p))->serial;
m_delay = (DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
m_requestNum = ((ThreadInfo *)(p))->n_request;
for (int i = 0;i<m_requestNum;i++)
m_thread_request[i] = ((ThreadInfo*)(p))->thread_request[i];


Sleep(m_delay);
//循环进行所需产品的消费
for(i =0;i<m_requestNum;i++){

//请求消费下一个产品
printf("Consumer %2d request to consume %2d product\n",m_serial,m_thread_request[i]);
//如果对应生产者没有生产,则等待;如果生产了,允许的消费者数目-1;实现了读写同步;
wait_for_semaphore=WaitForSingleObject(h_Semaphore[m_thread_request[i]],-1);

//查询所需产品放到缓冲区的号
int BufferPos=FindBufferPosition(m_thread_request[i]);

//开始进行具体缓冲区的消费处理,读和读在该缓冲区上仍然是互斥的;
//进入临界区后执行消费动作;并在完成此次请求后,通知另外的消费者本处请求已
//经满足;同时如果对应的产品使用完毕,就做相应处理;并给出相应动作的界面提
//示;该相应处理指将相应缓冲区清空,并增加代表空缓冲区的信号量;
EnterCriticalSection(&PC_Critical[BufferPos]);

printf("Consumer%2d begin to consume %2d product \n",m_serial,m_thread_request[i]);
((ThreadInfo*)(p))->thread_request[i] =-1;

if(!IfInOtherRequest(m_thread_request[i])){
Buffer_Critical[BufferPos] = -1;//标记缓冲区为空;
printf("Consumer%2d finish consuming %2d:\n ",m_serial,m_thread_request[i]);
printf(" position[ %2d ]:%3d \n" ,BufferPos,Buffer_Critical[BufferPos]);
ReleaseSemaphore(empty_semaphore,1,NULL);
}
else{
printf("Consumer %2d finish consuming product %2d\n ",m_serial,m_thread_request[i]);
}
//离开临界区
LeaveCriticalSection(&PC_Critical[BufferPos]);

}
}
你用这个改吧,我不会vc


上一篇:惊唇劫

下一篇:没有了