www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式大雜燴
[導(dǎo)讀]本章將分為兩大部分進(jìn)行講解,前半部分將引出線程的使用場(chǎng)景及基本概念,通過(guò)示例代碼來(lái)說(shuō)明一個(gè)線程創(chuàng)建到退出到回收的基本流程。后半部分則會(huì)通過(guò)示例代碼來(lái)說(shuō)明如何控制好線程,從臨界資源訪問(wèn)與線程的執(zhí)行順序控制上引出互斥鎖、信號(hào)量的概念與使用方法。

本章將分為兩大部分進(jìn)行講解,前半部分將引出線程的使用場(chǎng)景及基本概念,通過(guò)示例代碼來(lái)說(shuō)明一個(gè)線程創(chuàng)建到退出到回收的基本流程。后半部分則會(huì)通過(guò)示例代碼來(lái)說(shuō)明如何控制好線程,從臨界資源訪問(wèn)與線程的執(zhí)行順序控制上引出互斥鎖、信號(hào)量的概念與使用方法。

5.1 線程的使用

5.1.1 為什么要使用多線程

在編寫代碼時(shí),是否會(huì)遇到以下的場(chǎng)景會(huì)感覺(jué)到難以下手? 

場(chǎng)景一:寫程序在拷貝文件時(shí),需要一邊去拷貝文件,一邊去向用戶展示拷貝文件的進(jìn)度時(shí),傳統(tǒng)做法是通過(guò)每次拷貝完成結(jié)束后去更新變量,再將變量轉(zhuǎn)化為進(jìn)度顯示出來(lái)。其中經(jīng)歷了拷貝->計(jì)算->顯示->拷貝->計(jì)算->顯示...直至拷貝結(jié)束。

這樣的程序架構(gòu)及其的低效,必須在單次拷貝結(jié)束后才可以刷新當(dāng)前拷貝進(jìn)度,若可以將進(jìn)程分支,一支單獨(dú)的解決拷貝問(wèn)題,一支單獨(dú)的解決計(jì)算刷新問(wèn)題,則程序效率會(huì)提升很多。

場(chǎng)景二:用阻塞方式去讀取數(shù)據(jù),實(shí)時(shí)需要發(fā)送數(shù)據(jù)的時(shí)候。例如在進(jìn)行串口數(shù)據(jù)傳輸或者網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)臅r(shí)候,我們往往需要雙向通信,當(dāng)設(shè)置讀取數(shù)據(jù)為阻塞模式時(shí)候,傳統(tǒng)的單線程只能等到數(shù)據(jù)接收來(lái)臨后才能沖過(guò)阻塞,再根據(jù)邏輯進(jìn)行發(fā)送。

當(dāng)我們要實(shí)現(xiàn)隨時(shí)發(fā)送、隨時(shí)接收時(shí),無(wú)法滿足我們的業(yè)務(wù)需求。若可以將進(jìn)程分支,一支單純的處理接收數(shù)據(jù)邏輯,一支單純的解決發(fā)送數(shù)據(jù)邏輯,就可以完美的實(shí)現(xiàn)功能?;谝陨蠄?chǎng)景描述,多線程編程可以完美的解決上述問(wèn)題。

5.1.2 線程概念

所謂線程,就是操作系統(tǒng)所能調(diào)度的最小單位。普通的進(jìn)程,只有一個(gè)線程在執(zhí)行對(duì)應(yīng)的邏輯。我們可以通過(guò)多線程編程,使一個(gè)進(jìn)程可以去執(zhí)行多個(gè)不同的任務(wù)。

相比多進(jìn)程編程而言,線程享有共享資源,即在進(jìn)程中出現(xiàn)的全局變量,每個(gè)線程都可以去訪問(wèn)它,與進(jìn)程共享“4G”內(nèi)存空間,使得系統(tǒng)資源消耗減少。本章節(jié)來(lái)討論Linux下POSIX線程。

5.1.3 線程的標(biāo)識(shí)pthread_t

對(duì)于進(jìn)程而言,每一個(gè)進(jìn)程都有一個(gè)唯一對(duì)應(yīng)的PID號(hào)來(lái)表示該進(jìn)程,而對(duì)于線程而言,也有一個(gè)“類似于進(jìn)程的PID號(hào)”,名為tid,其本質(zhì)是一個(gè)pthread_t類型的變量。線程號(hào)與進(jìn)程號(hào)是表示線程和進(jìn)程的唯一標(biāo)識(shí),但是對(duì)于線程號(hào)而言,其僅僅在其所屬的進(jìn)程上下文中才有意義。

在程序中,可以通過(guò)函數(shù),pthread_self,來(lái)返回當(dāng)前線程的線程號(hào),例程1是打印線程tid號(hào)。

獲取線程號(hào)
#include <pthread.h>
pthread_t pthread_self(void);
成功:返回線程號(hào)

測(cè)試?yán)?:(Phtread_txex1.c)

1 #include <pthread.h>
2 #include <stdio.h>
3
4 int main()
{
6  pthread_t tid = pthread_self();//獲取主線程的tid號(hào)
7  printf("tid = %lu\n",(unsigned long)tid);
8  return 0;
9 }

注意:

因采用POSIX線程接口,故在要編譯的時(shí)候包含pthread庫(kù),使用gcc編譯應(yīng)gcc xxx.c -lpthread 方可編譯多線程程序。

編譯運(yùn)行結(jié)果:

5.1.4 線程的創(chuàng)建

創(chuàng)建線程
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
成功:返回0

在傳統(tǒng)的程序中,一個(gè)進(jìn)程只有一個(gè)線程,可以通過(guò)函數(shù)pthread_create來(lái)創(chuàng)建線程。

該函數(shù)第一個(gè)參數(shù)為pthread_t類型的線程號(hào)地址,當(dāng)函數(shù)執(zhí)行成功后會(huì)指向新建線程的線程號(hào);

第二個(gè)參數(shù)表示了線程的屬性,一般傳入NULL表示默認(rèn)屬性;

第三個(gè)參數(shù)代表返回值為void*,形參為void*的函數(shù)指針,當(dāng)線程創(chuàng)建成功后,會(huì)自動(dòng)的執(zhí)行該回調(diào)函數(shù);

第四個(gè)參數(shù)則表示為向線程處理函數(shù)傳入的參數(shù),若不傳入,可用NULL填充,有關(guān)線程傳參后續(xù)小節(jié)會(huì)有詳細(xì)的說(shuō)明,接下來(lái)通過(guò)一個(gè)簡(jiǎn)單例程來(lái)使用該函數(shù)創(chuàng)建出一個(gè)線程。

測(cè)試?yán)?:(Phtread_txex2.c)

1  #include <pthread.h>
2  #include <stdio.h>
3  #include <unistd.h>
4  #include <errno.h>
5 
6  void *fun(void *arg)
7  
{
8   printf("pthread_New = %lu\n",(unsigned long)pthread_self());//打印線程的tid號(hào)
9  }
10
11 int main()
12 
{
13
14  pthread_t tid1;
15  int ret = pthread_create(&tid1,NULL,fun,NULL);//創(chuàng)建線程
16  if(ret != 0){
17   perror("pthread_create");
18   return -1;
19  }
20
21  /*tid_main 為通過(guò)pthread_self獲取的線程ID,tid_new通過(guò)執(zhí)行pthread_create成功后tid指向的空間*/
22  printf("tid_main = %lu tid_new = %lu \n",(unsigned long)pthread_self(),(unsigned long)tid1);
23  
24  /*因線程執(zhí)行順序隨機(jī),不加sleep可能導(dǎo)致主線程先執(zhí)行,導(dǎo)致進(jìn)程結(jié)束,無(wú)法執(zhí)行到子線程*/
25  sleep(1);
26
27  return 0;
28 }
29

運(yùn)行結(jié)果:

通過(guò)pthread_create確實(shí)可以創(chuàng)建出來(lái)線程,主線程中執(zhí)行pthread_create后的tid指向了線程號(hào)空間,與子線程通過(guò)函數(shù)pthread_self打印出來(lái)的線程號(hào)一致。

特別說(shuō)明的是,當(dāng)主線程伴隨進(jìn)程結(jié)束時(shí),所創(chuàng)建出來(lái)的線程也會(huì)立即結(jié)束,不會(huì)繼續(xù)執(zhí)行。并且創(chuàng)建出來(lái)的線程的執(zhí)行順序是隨機(jī)競(jìng)爭(zhēng)的,并不能保證哪一個(gè)線程會(huì)先運(yùn)行??梢詫⑸鲜龃a中sleep函數(shù)進(jìn)行注釋,觀察實(shí)驗(yàn)現(xiàn)象。

去掉上述代碼25行后運(yùn)行結(jié)果:

上述運(yùn)行代碼3次,其中有2次被進(jìn)程結(jié)束,無(wú)法執(zhí)行到子線程的邏輯,最后一次則執(zhí)行到了子線程邏輯后結(jié)束的進(jìn)程。

因此可以說(shuō)明,線程的執(zhí)行順序不受控制,且整個(gè)進(jìn)程結(jié)束后所產(chǎn)生的線程也隨之被釋放,在后續(xù)內(nèi)容中將會(huì)描述如何控制線程執(zhí)行。

5.1.5 向線程傳入?yún)?shù)

pthread_create()的最后一個(gè)參數(shù)的為void類型的數(shù)據(jù),表示可以向線程傳遞一個(gè)void數(shù)據(jù)類型的參數(shù),線程的回調(diào)函數(shù)中可以獲取該參數(shù),例程3舉例了如何向線程傳入變量地址與變量值。

測(cè)試?yán)?:(Phtread_txex3.c)

1  #include <pthread.h>
2  #include <stdio.h>
3  #include <unistd.h>
4  #include <errno.h>
5 
6  void *fun1(void *arg)
7  
{
8   printf("%s:arg = %d Addr = %p\n",__FUNCTION__,*(int *)arg,arg);
9  }
10
11 void *fun2(void *arg)
12 
{
13  printf("%s:arg = %d Addr = %p\n",__FUNCTION__,(int)(long)arg,arg);
14 }
15
16 int main()
17 
{
18
19  pthread_t tid1,tid2;
20  int a = 50;
21  int ret = pthread_create(&tid1,NULL,fun1,(void *)&a);//創(chuàng)建線程傳入變量a的地址
22  if(ret != 0){
23   perror("pthread_create");
24   return -1;
25  }
27  ret = pthread_create(&tid2,NULL,fun2,(void *)(long)a);//創(chuàng)建線程傳入變量a的值
28  if(ret != 0){
29   perror("pthread_create");
30   return -1;
31  }
32  sleep(1);
33  printf("%s:a = %d Add = %p \n",__FUNCTION__,a,&a);
34  return 0;
35 }
36

運(yùn)行結(jié)果:

本例程展示了如何利用線程創(chuàng)建函數(shù)的第四個(gè)參數(shù)向線程傳入數(shù)據(jù),舉例了如何以地址的方式傳入值、以變量的方式傳入值,例程代碼的21行,是將變量a先行取地址后,再次強(qiáng)制類型轉(zhuǎn)化為void后傳入線程,線程處理的回調(diào)函數(shù)中,先將萬(wàn)能指針void轉(zhuǎn)化為int*,再次取地址就可以獲得該地址變量的值,其本質(zhì)在于地址的傳遞。例程代碼的27行,直接將int類型的變量強(qiáng)制轉(zhuǎn)化為void進(jìn)行傳遞(針對(duì)不同位數(shù)機(jī)器,指針對(duì)其字?jǐn)?shù)不同,需要int轉(zhuǎn)化為long在轉(zhuǎn)指針,否則可能會(huì)發(fā)生警告),在線程處理回調(diào)函數(shù)中,直接將void數(shù)據(jù)轉(zhuǎn)化為int類型即可,本質(zhì)上是在傳遞變量a的值。

上述兩種方法均可得到所要的值,但是要注意其本質(zhì),一個(gè)為地址傳遞,一個(gè)為值的傳遞。當(dāng)變量發(fā)生改變時(shí)候,傳遞地址后,該地址所對(duì)應(yīng)的變量也會(huì)發(fā)生改變,但傳入變量值的時(shí)候,即使地址指針?biāo)傅淖兞堪l(fā)生變化,但傳入的為變量值,不會(huì)受到指針的指向的影響,實(shí)際項(xiàng)目中切記兩者之間的區(qū)別。具體說(shuō)明見(jiàn)例程4.

測(cè)試?yán)?:(Phtread_txex4.c)

1  #include <pthread.h>
2  #include <stdio.h>
3  #include <unistd.h>
4  #include <errno.h>
5 
6  void *fun1(void *arg)
7  
{
8   while(1){
9   
10   printf("%s:arg = %d Addr = %p\n",__FUNCTION__,*(int *)arg,arg);
11   sleep(1);
12  }
13 }
14
15 void *fun2(void *arg)
16 
{
17  while(1){
18  
19   printf("%s:arg = %d Addr = %p\n",__FUNCTION__,(int)(long)arg,arg);
20   sleep(1);
21  }
22 }
23
24 int main()
25 
{
26
27  pthread_t tid1,tid2;
28  int a = 50;
29  int ret = pthread_create(&tid1,NULL,fun1,(void *)&a);
30  if(ret != 0){
31   perror("pthread_create");
32   return -1;
33  }
34  sleep(1);
35  ret = pthread_create(&tid2,NULL,fun2,(void *)(long)a);
36  if(ret != 0){
37   perror("pthread_create");
38   return -1;
39  }
40  while(1){
41   a++;
42   sleep(1);
43   printf("%s:a = %d Add = %p \n",__FUNCTION__,a,&a);
44  }
45  return 0;
46 }
47

運(yùn)行結(jié)果:

上述例程講述了如何向線程傳遞一個(gè)參數(shù),在處理實(shí)際項(xiàng)目中,往往會(huì)遇到傳遞多個(gè)參數(shù)的問(wèn)題,我們可以通過(guò)結(jié)構(gòu)體來(lái)進(jìn)行傳遞,解決此問(wèn)題。

測(cè)試?yán)?:(Phtread_txex5.c)

1  #include <pthread.h>
2  #include <stdio.h>
3  #include <unistd.h>
4  #include <string.h>
5  #include <errno.h>
6 
7  struct Stu{
8   int Id;
9   char Name[32];
10  float Mark;
11 };
12
13 void *fun1(void *arg)
14 
{
15  struct Stu *tmp = (struct Stu *)arg;
16  printf("%s:Id = %d Name = %s Mark = %.2f\n",__FUNCTION__,tmp->Id,tmp->Name,tmp->Mark);
17  
18 }
19
20 int main()
21 
{
22
23  pthread_t tid1,tid2;
24  struct Stu stu;
25  stu.Id = 10000;
26  strcpy(stu.Name,"ZhangSan");
27  stu.Mark = 94.6;
28
29  int ret = pthread_create(&tid1,NULL,fun1,(void *)&stu);
30  if(ret != 0){
31   perror("pthread_create");
32   return -1;
33  }
34  printf("%s:Id = %d Name = %s Mark = %.2f\n",__FUNCTION__,stu.Id,stu.Name,stu.Mark);
35  sleep(1);
36  return 0;
37 }
38

運(yùn)行結(jié)果:

5.1.6 線程的退出與回收

線程的退出情況有三種:第一種是進(jìn)程結(jié)束,進(jìn)程中所有的線程也會(huì)隨之結(jié)束。第二種是通過(guò)函數(shù)pthread_exit來(lái)主動(dòng)的退出線程。第三種通過(guò)函數(shù)pthread_cancel被其他線程被動(dòng)結(jié)束。

當(dāng)線程結(jié)束后,主線程可以通過(guò)函數(shù)pthread_join/pthread_tryjoin_np來(lái)回收線程的資源,并且獲得線程結(jié)束后需要返回的數(shù)據(jù)。

線程退出
#include <pthread.h>
void pthread_exit(void *retval);

該函數(shù)為線程退出函數(shù),在退出時(shí)候可以傳遞一個(gè)void*類型的數(shù)據(jù)帶給主線程,若選擇不傳出數(shù)據(jù),可將參數(shù)填充為NULL。

線程資源回收(阻塞)
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
成功:返回0

該函數(shù)為線程回收函數(shù),默認(rèn)狀態(tài)為阻塞狀態(tài),直到成功回收線程后被沖開(kāi)阻塞。第一個(gè)參數(shù)為要回收線程的tid號(hào),第二個(gè)參數(shù)為線程回收后接受線程傳出的數(shù)據(jù)。

線程資源回收(非阻塞)
#define _GNU_SOURCE            
#include <pthread.h>
 int pthread_tryjoin_np(pthread_t thread, void **retval);
成功:返回0

該函數(shù)為非阻塞模式回收函數(shù),通過(guò)返回值判斷是否回收掉線程,成功回收則返回0,其余參數(shù)與pthread_join一致。

該函數(shù)傳入一個(gè)tid號(hào),會(huì)強(qiáng)制退出該tid所指向的線程,若成功執(zhí)行會(huì)返回0:

線程退出(指定線程號(hào))
#include <pthread.h>
int pthread_cancel(pthread_t thread);
成功:返回0

上述描述簡(jiǎn)單的介紹了有關(guān)線程回收的API,下面通過(guò)例程來(lái)說(shuō)明上述API。

測(cè)試?yán)?:(Phtread_txex6.c)


1  #include <pthread.h>
2  #include <stdio.h>
3  #include <unistd.h>
4  #include <errno.h>
5 
6  void *fun1(void *arg)
7  
{
8   static int tmp = 0;//必須要static修飾,否則pthread_join無(wú)法獲取到正確值
9   //int tmp = 0;
10  tmp = *(int *)arg;
11  tmp+=100;
12  printf("%s:Addr = %p tmp = %d\n",__FUNCTION__,&tmp,tmp);
13  pthread_exit((void *)&tmp);//將變量tmp取地址轉(zhuǎn)化為void*類型傳出
14 }
15
16
17 int main()
18 
{
19
20  pthread_t tid1;
21  int a = 50;
22  void *Tmp = NULL;//因pthread_join第二個(gè)參數(shù)為void**類型
23  int ret = pthread_create(&tid1,NULL,fun1,(void *)&a);
24  if(ret != 0){
25   perror("pthread_create");
26   return -1;
27  }
28  pthread_join(tid1,&Tmp);
29  printf("%s:Addr = %p Val = %d\n",__FUNCTION__,Tmp,*(int *)Tmp);
30  return 0;
31 }
32

運(yùn)行結(jié)果:

上述例程先通過(guò)23行將變量以地址的形式傳入線程,在線程中做出了自加100的操作,當(dāng)線程退出的時(shí)候通過(guò)線程傳參,用void*類型的數(shù)據(jù)通過(guò)pthread_join接受。

此例程去掉了之前加入的sleep函數(shù),原因是pthread_join函數(shù)具備阻塞的特性,直至成功收回掉線程后才會(huì)沖破阻塞,因此不需要靠考慮主線程會(huì)執(zhí)行到30行結(jié)束進(jìn)程的情況。

特別要說(shuō)明的是例程第8行,當(dāng)變量從線程傳出的時(shí)候,需要加static修飾,對(duì)生命周期做出延續(xù),否則無(wú)法傳出正確的變量值。

測(cè)試?yán)?:(Phtread_txex7.c)

1  #define _GNU_SOURCE 
2  #include <pthread.h>
3  #include <stdio.h>
4  #include <unistd.h>
5  #include <errno.h>
6 
7  void *fun(void *arg)
8  
{
9   printf("Pthread:%d Come !\n",(int )(long)arg+1);
10  pthread_exit(arg);
11 }
12
13
14 int main()
15 
{
16  int ret,i,flag = 0;
17  void *Tmp = NULL;
18  pthread_t tid[3];
19  for(i = 0;i < 3;i++){
20   ret = pthread_create(&tid[i],NULL,fun,(void *)(long)i);
21   if(ret != 0){
22    perror("pthread_create");
23    return -1;
24   }
25  }
26  while(1){//通過(guò)非阻塞方式收回線程,每次成功回收一個(gè)線程變量自增,直至3個(gè)線程全數(shù)回收
27   for(i = 0;i <3;i++){
28    if(pthread_tryjoin_np(tid[i],&Tmp) == 0){
29     printf("Pthread : %d exit !\n",(int )(long )Tmp+1);
30     flag++; 
31    }
32   }
33   if(flag >= 3break;
34  }
35  return 0;
36 }
37

運(yùn)行結(jié)果:

例程7展示了如何使用非阻塞方式來(lái)回收線程,此外也展示了多個(gè)線程可以指向同一個(gè)回調(diào)函數(shù)的情況。例程6通過(guò)阻塞方式回收線程幾乎規(guī)定了線程回收的順序,若最先回收的線程未退出,則一直會(huì)被阻塞,導(dǎo)致后續(xù)先退出的線程無(wú)法及時(shí)的回收。

通過(guò)函數(shù)pthread_tryjoin_np,使用非阻塞回收,線程可以根據(jù)退出先后順序自由的進(jìn)行資源的回收。

測(cè)試?yán)?:(Phtread_txex8.c)

1  #define _GNU_SOURCE 
2  #include <pthread.h>
3  #include <stdio.h>
4  #include <unistd.h>
5  #include <errno.h>
6 
7  void *fun1(void *arg)
8  
{
9   printf("Pthread:1 come!\n");
10  while(1){
11   sleep(1);
12  }
13 }
14
15 void *fun2(void *arg)
16 
{
17  printf("Pthread:2 come!\n");
18  pthread_cancel((pthread_t )(long)arg);//殺死線程1,使之強(qiáng)制退出
19  pthread_exit(NULL);
20 }
21
22 int main()
23 
{
24  int ret,i,flag = 0;
25  void *Tmp = NULL;
26  pthread_t tid[2];
27  ret = pthread_create(&tid[0],NULL,fun1,NULL);
28  if(ret != 0){
29   perror("pthread_create");
30   return -1;
31  }
32  sleep(1);
33  ret = pthread_create(&tid[1],NULL,fun2,(void *)tid[0]);//傳輸線程1的線程號(hào)
34  if(ret != 0){
35   perror("pthread_create");
36   return -1;
37  }
38  while(1){//通過(guò)非阻塞方式收回線程,每次成功回收一個(gè)線程變量自增,直至2個(gè)線程全數(shù)回收

39   for(i = 0;i <2;i++){
40    if(pthread_tryjoin_np(tid[i],NULL) == 0){
41     printf("Pthread : %d exit !\n",i+1);
42     flag++; 
43    }
44   }
45   if(flag >= 2break;
46  }
47  return 0;
48 }
49

運(yùn)行結(jié)果:

例程8展示了如何利用pthread_cancel函數(shù)主動(dòng)的將某個(gè)線程結(jié)束。27行與33行創(chuàng)建了線程,將第一個(gè)線程的線程號(hào)傳參形式傳入了第二個(gè)線程。

第一個(gè)的線程執(zhí)行死循環(huán)睡眠邏輯,理論上除非進(jìn)程結(jié)束,其永遠(yuǎn)不會(huì)結(jié)束,但在第二個(gè)線程中調(diào)用了pthread_cancel函數(shù),相當(dāng)于向該線程發(fā)送一個(gè)退出的指令,導(dǎo)致線程被退出,最終資源被非阻塞回收掉。

此例程要注意第32行的sleep函數(shù),一定要確保線程1先執(zhí)行,因線程是無(wú)序執(zhí)行,故加入該睡眠函數(shù)控制順序,在本章后續(xù),會(huì)講解通過(guò)加鎖、信號(hào)量等手段來(lái)合理的控制線程的臨界資源訪問(wèn)與線程執(zhí)行順序控制。

猜你喜歡

Linux下socket編程實(shí)例

Linux下應(yīng)用開(kāi)發(fā)基礎(chǔ)

Linux下能編譯成功,而Windows下編譯不過(guò)?

【Linux筆記】Vi/Vim編輯器

C語(yǔ)言、嵌入式中幾個(gè)非常實(shí)用的宏技巧

C語(yǔ)言、嵌入式應(yīng)用:TCP通信實(shí)例分析

C語(yǔ)言、嵌入式重點(diǎn)知識(shí):回調(diào)函數(shù)

C語(yǔ)言、嵌入式位操作精華技巧大匯總

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉