[file=uploads/200604/11_112820_.doc]点击下载[/file]
《生产者与消费者问题算法实现》
设计思想
因为有多个缓冲区,所以生产者线程没有必要在生成新的数据之前等待最后一个数据被消费者线程处理完毕。同样,消费者线程并不一定每次只能处理一个数据。在多缓冲区机制下,线程之间不必互相等待形成死锁,因而提高了效率。
多个缓冲区就好像使用一条传送带替代托架,传送带上一次可以放多个产品。生产者在缓冲区尾加入数据,而消费者则在缓冲区头读取数据。当缓冲区满的时候,缓冲区就上锁并等待消费者线程读取数据;每一个生产或消费动作使得传送带向前移动一个单位,因而,消费者线程读取数据的顺序和数据产生顺序是相同的。
可以引入一个count计数器来表示已经被使用的缓冲区数量。用hNotEmptyEvent 和hNotFullEvent 来同步生产者和消费者线程。每当生产者线程发现缓冲区满( count=BufferSize ),它就等待hNotEmptyEvent 事件。同样,当消费者线程发现缓冲区空,它就开始等待hNotEmptyEvent。生产者线程写入一个新的数据之后,就立刻发出hNotEmptyEvent 来唤醒正在等待的消费者线程;消费者线程在读取一个数据之后,就发出hNotFullEvent 来唤醒正在等待的生产者线程。
程序的设计思想大致为:设置一while循环,pi生产者访问临界区,得到权限访问缓冲区,如果缓冲区满的,则等待,直到缓冲区非满;访问互斥锁,当得到互斥锁且缓冲区非满时,跳出while循环,开始产生新数据,并把数据存放于Buffer缓冲区中,当数据存放结束则结束临界区;接着唤醒消费者线程;ci消费者访问临界区,得到权限访问缓冲区,如果缓冲区为空,没有可以处理的数据,则释放互斥锁且等待,直到缓冲区非空;当等到缓冲区非空时,跳出while循环;消费者获得数据,并根据所获得的数据按类别消费(当消费者获得的数据为大写字母时,则把大写字母转换成小写字母,并显示;当消费者获得的数据为小写字母时,则把小写字母转换成大写字母,并显示;当消费者获得的数据为字符0、1、2、……8、9时,把这些字符直接显示到屏幕;当消费者获得的数据为符号(+、-、*、\……)时,把这些符号打印成7行7列的菱形);处理完数据后,结束临界区;接着唤醒生产者线程。
#i nclude<stdio.h>
#i nclude< iostream.h>
#i nclude< windows.h>
#define BufferSize 15
char Buffer[BufferSize];
int head,tail=0;//Buffer数组下标
int count;//被使用的缓冲区数量
HANDLE hMutex;
HANDLE hNotFullEvent, hNotEmptyEvent;//用来同步生产者和消费者线程
////////缓冲区存储情况
display(char a[15])
{
int i;
cout<<"缓冲区存储情况为:"<<endl;
for (i=14;i>=0;i–){
cout<<"\t|—-"<<a[i]<<"—-|"<<endl;
}
}
//p1
void p1_Producer()
{
int i;
char ch;
char p1[]={'a','A','b','B','c','C','D','d','E','e'};
if(tail<15){
for(i=0;i<10;i++){
while(1) {
WaitForSingleObject(hMutex,INFINITE);
if(count==BufferSize){ //缓冲区满
ReleaseMutex(hMutex);
//等待直到缓冲区非满
WaitForSingleObject(hNotFullEvent,INFINITE);
continue;
}
//得到互斥锁且缓冲区非满,跳出while循环
break;
}
if (tail>14){
cout<<"缓冲区已满,不能再存入数据!"<<endl;
ReleaseMutex(hMutex); //结束临界区
PulseEvent(hNotEmptyEvent); //唤醒消费者线程
}
else{
//得到互斥锁且缓冲区非满,开始产生新数据
cout<<"Producer p1:\t"<<p1[i]<<endl;
Buffer[tail]=p1[i];
//tail=(tail+1)%BufferSize;///存放于缓冲区的位置
display(Buffer);
tail++;
count++;
cout<<"按ENTER继续…."<<endl;
ch=getchar();
ReleaseMutex(hMutex); //结束临界区
PulseEvent(hNotEmptyEvent); //唤醒消费者线程
}
}
}
}
//////////////////////////////////////////////////////////////////
//p2
void p2_Producer()
{
int i;
char ch;
char p2[]={'0','1','2','3','4','5','6','7','8','9'};
if(tail<15){
for(i=0;i<10;i++){
while(1) {
ch=getchar();
WaitForSingleObject(hMutex,INFINITE);
if(count==BufferSize){ // 缓冲区满
ReleaseMutex(hMutex);
// 等待直到缓冲区非满
WaitForSingleObject(hNotFullEvent,INFINITE);
continue;
}
// 得到互斥锁且缓冲区非满,跳出while循环
break;
}
if (tail>14){
cout<<"缓冲区已满,不能再存入数据!程序结束!"<<endl;
ReleaseMutex(hMutex); //结束临界区
PulseEvent(hNotEmptyEvent); //唤醒消费者线程
}
else{
// 得到互斥锁且缓冲区非满,开始产生新数据
cout<<"Producer p2:\t"<<p2[i]<<endl;
Buffer[tail]=p2[i];
//tail=(tail+1)%BufferSize;
display(Buffer);
tail++;
count++;
cout<<"按ENTER继续…."<<endl;
ch=getchar();
ReleaseMutex(hMutex); // 结束临界区
PulseEvent(hNotEmptyEvent); // 唤醒消费者线程
}
}
}
}
//////////////////////////////////////////////////////////////////
//p3
void p3_Producer()
{
int i;
char ch;
char p3[]={'!','#','$','%','&','*','+','-','.','/'};
if(tail<15){
for(i=0;i<10;i++){
while(1) {
ch=getchar();
WaitForSingleObject(hMutex,INFINITE);
if(count==BufferSize){ // 缓冲区满
ReleaseMutex(hMutex);
// 等待直到缓冲区非满
WaitForSingleObject(hNotFullEvent,INFINITE);
continue;
}
// 得到互斥锁且缓冲区非满,跳出while循环
break;
}
if (tail>14){
cout<<"缓冲区已满,不能再存入数据!程序结束!"<<endl;
ReleaseMutex(hMutex); //结束临界区
PulseEvent(hNotEmptyEvent); //唤醒消费者线程
}
else{
// 得到互斥锁且缓冲区非满,开始产生新数据
cout<<"Producer p3:\t"<<p3[i]<<endl;
Buffer[tail]=p3[i];
//tail=(tail+1)%BufferSize;
display(Buffer);
tail++;
count++;
cout<<"按ENTER继续…."<<endl;
ch=getchar();
ReleaseMutex(hMutex); // 结束临界区
PulseEvent(hNotEmptyEvent); // 唤醒消费者线程
}
}
}
}
//////////////////////////////////////////////////////////////////
//c1
void c1_Consumer()
{
int i,j,k;
char result,ch;
while(1){
ch=getchar();
WaitForSingleObject(hMutex,INFINITE);
if(count==0){ // 没有可以处理的数据
ReleaseMutex(hMutex); // 释放互斥锁且等待
// 等待直到缓冲区非空
WaitForSingleObject(hNotEmptyEvent,INFINITE);
}
else {i
f(Buffer[head]==0) {
cout<<"Consumer 0: 缓冲区的数据已全消费过一次,消费完毕!"<<endl;
ReleaseMutex(hMutex); // 结束临界区
ExitThread(0);
}
else { // 获得互斥锁且缓冲区有数据,开始处理
result=Buffer[head];
if(result>64&&result<70){
result=result+32;
cout<<"Consumer c1:(大写->小写)\t "<<result<<endl;
Buffer[head]='^';// '^'表示数据已被消费
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);
}
if(result>96&&result<102){
result=result-32;
cout<<"Consumer c1:(小写->大写)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);
}
if(result>47&&result<58){
cout<<"Consumer c1:(显示字符)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);}
if(result>32&&result<48){
cout<<"Consumer c1:(用符号打印出菱形) "<<endl;
for(i=1;i<=(9+1)/2;i++)
{
for(j=1;j<=40-i;j++)
cout<<" ";
for(k=1;k<=2*i-1;k++)
cout<<result;
cout<<endl;
}
for(i=1;i<=9/2;i++)
{
for(j=1;j<=40-(9+1)/2+i;j++)
cout<<" ";
for(k=1;k<=9-2*i;k++)
cout<<result;
cout<<endl;
}
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);
}
head=(head+1)%BufferSize;
count–;
cout<<"按ENTER继续…."<<endl;
ch=getchar();
ReleaseMutex(hMutex); // 结束临界区
PulseEvent(hNotFullEvent); // 唤醒生产者线程
}
}
}
}
//////////////////////////////////////////////////////////////////
//c2
void c2_Consumer()
{
int i,j,k;
char result,ch;
while(1){
WaitForSingleObject(hMutex,INFINITE);
if(count==0){ // 没有可以处理的数据
ReleaseMutex(hMutex); // 释放互斥锁且等待
// 等待直到缓冲区非空
WaitForSingleObject(hNotEmptyEvent,INFINITE);
}
else {if(Buffer[head]==0) {
cout<<"Consumer 0:缓冲区的数据已全消费过一次,消费完毕!"<<endl;
ReleaseMutex(hMutex); // 结束临界区
ExitThread(0);
}
else { // 获得互斥锁且缓冲区有数据,开始处理
result=Buffer[head];
if(result>64&&result<90){
result=result+32;
cout<<"Consumer c2:(大写->小写)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);
}
if(result>96&&result<102){
result=result-32;
cout<<"Consumer c2:(小写->大写)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);}
if(result>47&&result<58){
cout<<"Consumed c2:(显示字符)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);}
if(result>32&&result<48){
cout<<"Consumer c2:(用符号打印出菱形) "<<endl;
for(i=1;i<=(9+1)/2;i++)
{
for(j=1;j<=40-i;j++)
cout<<" ";
for(k=1;k<=2*i-1;k++)
cout<<result;
cout<<endl;
}
for(i=1;i<=9/2;i++)
{
for(j=1;j<=40-(9+1)/2+i;j++)
cout<<" ";
for(k=1;k<=9-2*i;k++)
cout<<result;
cout<<endl;
}
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);
}
head=(head+1)%BufferSize;
count–;
cout<<"按ENTER继续…."<<endl;
ch=getchar();
ReleaseMutex(hMutex); // 结束临界区
PulseEvent(hNotFullEvent); // 唤醒生产者线程
}
}
}
}
//////////////////////////////////////////////////////////////////
//c3
void c3_Consumer()
{
int i,j,k;
char result,ch;
while(1){
WaitForSingleObject(hMutex,INFINITE);
if(count==0){ // 没有可以处理的数据
ReleaseMutex(hMutex); // 释放互斥锁且等待
// 等待直到缓冲区非空
WaitForSingleObject(hNotEmptyEvent,INFINITE);
}
else {if(Buffer[head]==0) {
cout<<"Consumer 0: 缓冲区的数据已全消费过一次,消费完毕!"<<endl;
ReleaseMutex(hMutex); // 结束临界区
ExitThread(0);
}
else { // 获得互斥锁且缓冲区有数据,开始处理
result=Buffer[head];
if(result>64&&result<70){
result=result+32;
cout<<"Consumer c3:(大写->小写)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);}
if(result>96&&result<102){
result=result-32;
cout<<"Consumer c3:(小写->大写)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);}
if(result>47&&result<58){
cout<<"Consumer c1:(显示字符)\t "<<result<<endl;
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);
}
if(result>32&&result<48){
cout<<"Consumer c3:(用符号打印出菱形) "<<endl;
for(i=1;i<=(7+1)/2;i++)
{
for(j=1;j<=40-i;j++)
cout<<" ";
for(k=1;k<=2*i-1;k++)
cout<<result;
cout<<endl;
}
for(i=1;i<=7/2;i++)
{
for(j=1;j<=40-(7+1)/2+i;j++)
cout<<" ";
for(k=1;k<=7-2*i;k++)
cout<<result;
cout<<endl;
}
Buffer[head]='^';
cout<<"'^'表示数据已被消费"<<endl;
display(Buffer);
}
head=(head+1)%BufferSize;
count–;
cout<<"按ENTER继续…."<<endl;
ch=getchar();
ReleaseMutex(hMutex); // 结束临界区
PulseEvent(hNotFullEvent); // 唤醒生产者线程
}
}
}
}
//////////////////////////////////////////////////////////////////
//主函数
void main()<
br/>{
HANDLE hThreadVector[6];
DWORD ThreadID;
count = 0;
head = 0;
tail = 0;
hMutex=CreateMutex(NULL,FALSE,NULL);
hNotFullEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
hNotEmptyEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
hThreadVector[0]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) p1_Producer,NULL, 0, (LPDWORD)&ThreadID);
hThreadVector[1]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) c1_Consumer,NULL, 0, (LPDWORD)&ThreadID);
hThreadVector[3]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) p2_Producer,NULL, 0, (LPDWORD)&ThreadID);
hThreadVector[4]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) c2_Consumer,NULL, 0, (LPDWORD)&ThreadID);
hThreadVector[5]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) p3_Producer,NULL, 0, (LPDWORD)&ThreadID);
hThreadVector[5]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) c3_Consumer,NULL, 0, (LPDWORD)&ThreadID);
WaitForMultipleObjects(2,hThreadVector,TRUE,INFINITE);
//cout<<"**********************Finish*************************"<<endl;
[file=uploads/200604/09_195533_09_184138_.doc]点击下载[/file]
江泽民同志在“七。一”讲话中指出:“现在,我们发展社会主义市场经济,与马克思主义创始人当时所面对和研究的情况有很大不同。我们应该结合新的实际,深化对社会主义社会劳动和劳动价值理论的认识和研究。”那么,我们应该如何深化?笔者认为,首先必须走出三大认识误区。
一.走出“唯有物质生产部门的体力劳动才创造价值”的认识误区。马克思认为,商品是由劳动创造的。具体劳动创造商品的使用价值,抽象劳动创造商品的价值。由此,传统的政治经济学教科书认为,只有物质生产领域的体力劳动才是生产性劳动,才是价值的唯一源泉,而绝大部分非物质生产性劳动,是不创造价值的。其实,这是一种认识误区。
资本主义社会化生产中的劳动过程,它是一种分工协作的共同劳动,即“总体劳动。”在总体劳动中,不仅加工于劳动对象的劳动是生产性劳动,凡是与生产产品直接间接有关的劳动,包括科技人员和管理人员的劳动,都是“总体劳动”中必要的构成部分,都是生产劳动,都创造价值。在马克思著作中明确地论述了这种观点。在总体劳动过程中,“有的人多用手工作,有的人多用脑工作,有的人当经理、工程师、工艺师等等,有的人当监工,有的人当直接的体力劳动者或者做十分简单的粗工,于是劳动能力越来越多的职能被列在生产劳动的直接概念之下。”(马恩)49卷100-101页)
由此可见,马克思把从事科技工作的工程师等脑力劳动者,也看成是总体劳动过程中的生产劳动。那种认为只有物质生产部门的体力劳动才创造价值的观点,不是马克思主义的观点,是对马克思劳动价值论的一种误解。
. 二.走出“活劳动和物化劳动共同创造价值”,即各种生产要素共同创造价值的认识误区。持这种生产要素价值论的人认为,共同创造价值的是土地、劳动、资本、企业家才能等生产要素或者还有其他若干非经济要素。既然价值是由生产要素“共同创造”的,因而“共同分配”,生产要素的主体(劳动者、资本家、土地所有者)各得基份,谁也不剥削谁。而马克思认为,,只有活劳动才是价值的唯一源泉,物化劳动不是价值的源泉。因此,生产要素价值论与马克思的劳动价值论是根本对立的。
生产要素价值论之所以今天还在我国流行,根本的原因在于市场经济的表面现象很容易使人产生一种错觉,似乎在生产领域中各种生产要素都参加了商品价值的生产。同时,在“知识经济”的今天,也很容易使人产生一种错觉,似乎创造价值的主要是新知识和高科技,而不是活劳动。
马克思认为,决定劳动生产力的因素是多元的,决定价值的因素是一元的。新知识、高科技能提高人的素质和物的效能。大商品生产中,新知识、新科技进入劳动过程,可以极大地提高劳动生产率,创造出更多的使用价值或物质财富,但它不进入价值形成和价值增值过程,不创造价值。决定价值的因素是一般的无差别的人类劳动,也就是抽象劳动。除此之外,不存在任何其他决定价值的因素。新知识、新科技本身不创造价值,而是掌握和运用新知识、高科技的劳动者的复杂劳动在创造价值。
三.走出“资本家不劳动,不创造价值”的认识误区。过去,我们在学习马克思劳动价值论和剩余价值论时,总认为马克思只强调了资本家生产过程中的剥削劳动和剥削性质。其实资本家作为协作劳动的指挥者的管理劳动是生产性劳动,同样创造价值。
马克思在分析资本主义企业的管理时,指出了这种管理的二重性质。一方面,作为协作劳动的指挥和监督劳动,“是一种生产劳动。”(《资本论》3卷431页),另一方面,这种指挥和监督劳动又是“由生产资料的所有者的和单纯的劳动力所有者之间的对立引起的职能。”这是一种“剥削的劳动。”(《资本论》3卷433页)。马克思既然肯定资本家作为协作劳动的指挥者的管理劳动是生产劳动,自然会肯定这种劳动同样创造价值。
深化对劳动和劳动价值论的认识
施萍 吉林大学经济学院(99经济学基地)
内容提要:《中共中央关于制定国民经济和社会发展第十个五年计划的建议》(以下简称《建议》)中指出,“实行按劳分配为主体,多种分配形式并存的分配制度,把按劳分配与按要素分配结合起来,鼓励资本、技术等生产要素参与收入分配。随着生产力的发展,科学技术工作和经营管理作为劳动的重要形式,在社会生产中起着越来越重要的作用。在新的历史条件下,要深化对劳动与劳动价值论的认识。”与马克思提出劳动价值论的时代相比,现代社会发生了翻天覆地的变化,马克思不可能完全预见到现代社会出现的各种新问题。这就要求我们要以一种发展的眼光看待劳动价值论,用马克思主义的基本理论解决新问题,从一个新的角度来看待马克思主义的基本理论。本文拟就在新的时代背景下如何看待劳动价值论,企业经营管理者和科学技术工作者如何参与收入分配等问题略陈笔者管见。
关键词:劳动价值论 价值 体力劳动 脑力劳动
一、 我国现行的分配制度的理论根源
由于我国现在尚处于社会主义经济运行中的初级阶段,社会主义市场经济体制已基本建立,经济运行中公有制为主体、多种所有制经济形式并存,收入分配采取按劳分配与按生产要素分配相结合的分配制度。
1、按劳分配与按要素分配相结合的分配制度是由我国所有制结构的多样性决定的:我国所处的社会主义初级阶段的生产力水平和公有制经济的相互结合,决定了在公有制经济中只能采取按劳分配的收入分配制度。另一方面,由于我国还处于社会主义初级阶段,非公有制经济与公有制经济并存,共同参与创造财富,要求按生产要素分配。按生产要素分配,就是指各种要素都应根据其在再生产过程中所做出的贡献的大小来参与收益分配,获得相应的报酬。基于我国社会经济发展的客观现实,只有按劳分配和按要素分配相结合的收入分配制度,才是现阶段唯一公平的分配方式,这种分配方式在形式上是平等的,因而也是公平的。在公有制经济中,由于国家和集体是除了劳动以外的一切生产要素唯一的所有者,因此全体社会成员只能是劳动者而不能是其他生产要素的所有者。在这种情况下只能实行按劳分配,即按付出劳动量的多少来决定应该获得的收入的数量。但是这种分配方式也存在不平等的一面,由于人的天赋、能力、所承担的责任和风险、担任的工作的难易程度都是不一样的,对社会、生产做出的贡献也是不一样的,如果采用同一种分配方式同等的对待必然产生新的不平等。正如马克思在《哥达纲领批判》中说到“像一切权利一样是一种不平等的权利”。[1]而“要避免所有这些弊病,权利就不应当是平等的,而应当是不平等的。” [2]
2、按劳分配与按要素分配相结合的分配制度,是由各种生产要素在财富的创造过程中所做出的贡献决定的。威廉·配第曾经指出:“劳动是财富之母,土地是财富之父”,马克思也曾经在《资本论》和《哥达纲领批判》等文献中多次指出劳动并非一切财富的唯一源泉。现实的常识告诉我们仅仅有劳动者而没有资本、土地等其他生产要素的参与,是不可能创造价值和财富的,在生产过程中三者缺一不可(应该注意这并不意味着资本、土地也创造价值)。对此马克思曾经论述到:“没有自然界,没有感性的外部世界,工人就什么也不能创造。它是工人用来实现自己的劳动,在其中展开劳动活动,由其中生产出和借以生产出自己的产品的原材料。”[3]此外,随着经济的发展,知识、技术、信息和管理才能等过去不被重视的要素在现代的生产和经营中占据越来越重要的地位,他们也要求参与分配。马克思在《哥达纲领批判》中指出,由于“消费资料的任何一种分配,都不过是生产条件本身分配的结果。”所以应该允许资本和技术等生产要素的所有者参与分配,这样有利于生产要素向更有效的领域流动,有利于技术进步的加快,有利于我国产业结构的升级和经济增长方式的转变。
有人认为,既然生产要素包括劳动,那么按劳分配应该包含在按生产要素分配之中 ,因而认为我国应该实行按生产要素分配,而不是按劳分配与按生产要素分配相结合的分配制度。这种观点的错误在于:他们把按劳分配中的“劳动”与按生产要素分配中的“劳动”混为一谈,混同了按劳分配和按劳动力价值分配。事实上按劳分配中的“劳动”是指生产物质产品的活劳动,而按生产要素分配中的“劳动”是指在劳动力市场买卖的劳动力。按劳分配包含了必要劳动价值和剩余劳动创造的剩余产品价值中应该享有的那一部分,而按劳动力价值分配仅仅是必要劳动价值(如果真的是劳资双方“等价交换”的话)。
其次,应该正确认识按生产要素分配不等于要素价值论。按生产要素分配是由于资本家对资本、土地所有者对土地的所有权,基于这种法律上的财产权,他们享有对剩余价值的索取权,但并不能因此认定资本、土地等其他生产要素也创造价值。与此相反,要素价值论的最基本的观点是土地、资本、劳动三种生产要素共同创造价值,现在还有人提出企业家作为第四大生产要素,把前三种生产要素结合起来共同创造价值。他们提倡按贡献分配,他们认为,资本、土地也要参与分配正是因为它们也参与了价值的创造。要素价值论把使用价值的生产和价值的生产、价值的形成过程和价值的增殖过程混为一谈。
为什么有不少学者信奉要素价值论?看似合理的要素价值论真的合理吗?这就要求我们弄清到底是什么创造价值。此外知识经济和信息时代的到来,也要求我们深化对劳动和劳动价值的认识。
二、 深化对劳动和劳动价值论的认识
随着知识经济和信息时代的到来,人力资本(主要是指企业家和技术创新者)在经济发展中的作用越来越大,人力资本创造的价值也越来越多,现代生产中体力劳动所占比重不断降低、劳动复杂程度不断提高的情况下,不少学者对马克思的劳动价值论产生了怀疑。在这种新的时代背景下,我们该如何看待马克思的劳动价值论?
有的学者认为马克思不重视脑力劳动,认为马克思所说的劳动指的就是体力劳动。因而在知识经济到来的时候他们提出:商品中所含的体力劳动的成分越来越少了,因而马克思的劳动价值论也不再适用了,商
品价值应该从由劳动和劳动时间决定变为由“知识含量”决定、由知识来计量。事实上,马克思从来就没有忽略过脑力劳动。马克思在《资本论》中清楚地论述到:“每当人生产某种使用价值时就运用体力和智力的总和”,[5]也就是说,无论是生产何种商品,都是脑力劳动和体力劳动相结合生产的,只不过是体力劳动和脑力劳动所占的比例不同罢了。由于马克思所处的时代是体力劳动居于主体地位的时代,因而《资本论》中更多的是以体力劳动为例来分析。而现在脑力劳动取代了体力劳动的主导地位,出现了“无人工厂”、“生产自动化”,体力劳动的作用逐渐被人们所忽略了。对于这种生产方式,马克思在《资本论》中也有提及:“劳动表现为不再像以前那样被包括在生产过程中,相反地,表现为人以生产过程的监督者和调节者的身份同生产过程本身发生关系。这里已经不再是工人把改变了形态的自然物作为中间环节放在自己和对象之间;而是工人把由他改变为工业过程的自然过程作为媒介放在自己和被他支配的无机自然界之间。工人不再是生产过程的主要当事者,而是站在生产过程的旁边。” [6]在这里马克思清楚地意识到了生产率的发展将使得体力劳动的主体地位会逐渐被脑力劳动所替代(但是由于历史的局限性马克思不可能详细地阐述这一现象),但是这并不代表劳动创造价值的理论论断不再适用,马克思所说的劳动从始到终都包括了脑力劳动。归根到底机器也是由劳动者劳动创造的;科技推动了生产力的发展,但是这也是科技工作者大量脑力劳动的结晶。此外,如果不通过劳动将科技成果运用到生产中,科技的发展也不会对生产做出太大的贡献。再者,前文引述的自动化生产方式所创造出的大量产品,是物质财富、是使用价值,而且马克思的劳动二重性理论已经对劳动生产力与价值及使用价值的关系做了明确的论证。因此,产品的剧增并无法否定劳动价值论的科学性,在知识经济的新形势下,劳动价值论取得了一定的发展,但商品的价值仍然由社会必要劳动时间决定的原理是不变的,只不过这种劳动具有高效性、高能性和高质性等新的特点。
其次,应该搞清到底是什么创造了价值,正确认识马克思所说的“劳动是唯一的价值源泉” [7]和“劳动并不是它所生产的使用价值即物质财富的唯一源泉”。[8]马克思强调 “只有劳动才是我们在任何时候都能够用来估计和比较各种商品价值的最后的和现实的唯一尺度”,[9]也就是说劳动是价值的唯一源泉,准确地说应该是一般的无差别的人类劳动或抽象的人类劳动是价值的唯一源泉。这里的劳动是指创造价值的抽象劳动而非具体劳动,马克思在《资本论》中明确地说到“一切劳动,从一方面看,是人类劳动力在生理学意义上的耗费;作为相同的或抽象的人类劳动,它形成商品价值。一切劳动,从另一方面看,是人类劳动力在特殊的有一定目的的形式上的耗费;作为具体的有用劳动,它生产使用价值。”[10]虽然资本和土地等其他生产要素都参与了价值的形成过程,但是在价值的形成过程中,他们都不创造新的价值,仅仅转移了原有的旧价值。需要指出的是,在新的时代背景下,劳动不再仅仅是指体力劳动还应该包括脑力劳动,而且脑力劳动正逐渐取代体力劳动的主体地位。因此上述的抽象劳动应该包括更高层次的脑力劳动,即技术创新、知识应用、理论研究和企业管理等类型的脑力劳动。“劳动不是一切财富的唯一源泉”是指仅仅靠劳动是不能创造财富的,财富的形成要求劳动、资本和土地三者相结合。这里的劳动是指创造使用价值的具体劳动。因此说资本和土地参与使用价值的创造,参与了价值的形成过程是正确的,而说它们创造了价值是完全错误的。
此外,还应该强调的是创造价值的只是劳动中的活劳动,物化劳动是已经凝结、物化的活劳动,是商品的价值。现代化生产中有这样一种现象:活劳动在具体的生产过程中所占的比重越来越小,物化劳动(机器、设备等)的作用越来越重要,但是物化劳动并不创造商品的价值。这是因为:首先,机器、设备等生产资料也凝结了无差别的人类劳动,是由活劳动创造;其次,这些生产资料是通过提高劳动生产率,从而缩短劳动者的必要劳动时间、延长剩余劳动时间,以此来增加劳动工人创造的剩余价值,它本身并不创造价值。因而创造价值的只是劳动中的活劳动。
基于以上认识,在脑力劳动占据主体地位、信息技术和知识在生产过程中越来越重要的背景下,我们该如何认识企业经营者在生产中的作用以及他们该以何种形式参与分配?
三、 正确认识科学技术工作者和经营管理者的劳动
当今科学技术工作和经营管理工作在经济生活中的地位越来越重要,国民生产总值的增加在很大程度上取决于生产效率的提高,从而使得单位时间内生产的产品数量增加。这不仅仅是生产工人的劳动支出的增加,更多的是包括了科技工作者和经营管理者为了提高劳动生产率所付出的大量的复杂的脑力劳动。由于企业经营者的经营管理才能是企业能否生存和发展的关键、也是一个国家经济实力能否大大加强的重要因素。这就要求我们对科学技术工作者企业经营者的经营管理劳动做出全面的评价,提出相应的激励措施。对此,《建议》提出了指导性的意见:“随着生产力的发展,科学技术工作和经营管理作为劳动的重要形式,在社会生产中起着越来越重要的作用。在新的历史条件下……建立健全收入分配的激励机制和约束机制。对企业领导人能和科技骨干实行年薪制和股权、期权试点。”
关于科技工作者的劳动的价值应该从以下两个方面来考察:一方面,科技工作者作为生产性劳动者,他们自身的劳动创造价值。对此,马克思在《资本论》中也做过论述:“有的人多用手工作,有的人多用脑工作,有的人当经理、工程师、工艺师等等,有的人当监工,有的人当直接体力劳动者或者做十分简单的粗工,于是劳动能力的越来越多的职能被列在生产劳动的直接概念下,这种劳动能力的承担者也被列在生产工人的概念下。”[11]由此可见,马克思把科学技术工作者和经营管理者也看作是生产劳动者,从而也参与了价值的创造。而且由于科技工作者的劳动是一种复杂劳动,因此在同样的时间内,他们可以创造出比一般劳动者更多的价值。另一方面,科技工作者的劳动在提高劳动生产率、增加企业的经济效益以及创造社会财富中均起到了决定性的作用。科技工作者将先进的科技应用到生产过程中,不仅可以通过提高劳动生产率来增加产品的数量,还可以提高产品的质量。因而,在评价科技工作者劳动的价值的时候,不应该仅仅根据他们的复杂劳动创造的价值的多少来衡量,还要看到他们在创造社会财富中的作用。
关于企业经营管理者的劳动的价值,如前所述,马克思把经营管理者看作是生产劳动者。不过,经营管理者创造价值的劳动不同于一般工人创造价值的劳动,他们对于企业的作用也不同于
为什么我总是天天好象觉得很烦一样呢?
看周围的朋友都是一样的啊?
不明白,为什么我的心情就特别的不爽?!
————————————————————————————————————-
天天微笑、时时微笑
对每个人都微笑
会不会以为我是神经病或不怀好意?
夏天来的如此轰轰烈烈,!让人如此不知所措,好热,昨晚蚊子好多,好多血没了。
[shuai]