child_thread = nullptr;

// TODO: remove from thread group?

env->SetLongField(java_peer, WellKnownClasses::java_lang_Thread_nativePeer, 0);

{

std::string msg(child_jni_env_ext.get() == nullptr ?

StringPrintf(“Could not allocate JNI Env: %s”, error_msg.c_str()) :

StringPrintf(“pthread_create (%s stack) failed: %s”,

PrettySize(stack_size).c_str(), strerror(pthread_create_result)));

ScopedObjectAccess soa(env);

soa.Self()->ThrowOutOfMemoryError(msg.c_str());

}

}

CreateNativeThread函数通过调用pthread_create函数来创建线程。pthread_create的实现在Bionic目录的pthread_create对象中。Bionic是Android平台为了使用C/C++进行原生应用程序开发所有提供的POSIX标准C库,如果Bionic也有实现pthread_create兼容Android的线程创建。

/bionic/libc/bionic/pthread_create.cpp

int pthread_create(pthread_t* thread_out, pthread_attr_t const* attr,

void* (start_routine)(void), void* arg) {

ErrnoRestorer errno_restorer;

// Inform the rest of the C library that at least one thread was created.

__isthreaded = 1;

pthread_attr_t thread_attr;

if (attr == NULL) {

pthread_attr_init(&thread_attr);

} else {

thread_attr = *attr;

attr = NULL; // Prevent misuse below.

}

pthread_internal_t* thread = NULL;

void* child_stack = NULL;

int result = __allocate_thread(&thread_attr, &thread, &child_stack);

if (result != 0) {

return result;

}

// Create a lock for the thread to wait on once it starts so we can keep

// it from doing anything until after we notify the debugger about it

//

// This also provides the memory barrier we need to ensure that all

// memory accesses previously performed by this thread are visible to

// the new thread.

thread->startup_handshake_lock.init(false);

thread->startup_handshake_lock.lock();

thread->start_routine = start_routine;

thread->start_routine_arg = arg;

thread->set_cached_pid(getpid());

int flags = CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM |

CLONE_SETTLS | CLONE_PARENT_SETTID | CLONE_CHILD_CLEARTID;

void* tls = reinterpret_cast<void*>(thread->tls);

#if defined(i386)

// On x86 (but not x86-64), CLONE_SETTLS takes a pointer to a struct user_desc rather than

// a pointer to the TLS itself.

user_desc tls_descriptor;

__init_user_desc(&tls_descriptor, false, tls);

tls = &tls_descriptor;

#endif

int rc = clone(__pthread_start, child_stack, flags, thread, &(thread->tid), tls, &(thread->tid));

if (rc == -1) {

int clone_errno = errno;

// We don’t have to unlock the mutex at all because clone(2) failed so there’s no child waiting to

// be unblocked, but we’re about to unmap the memory the mutex is stored in, so this serves as a

// reminder that you can’t rewrite this function to use a ScopedPthreadMutexLocker.

thread->startup_handshake_lock.unlock();

if (thread->mmap_size != 0) {

munmap(thread->attr.stack_base, thread->mmap_size);

}

__libc_format_log(ANDROID_LOG_WARN, “libc”, “pthread_create failed: clone failed: %s”, strerror(errno));

return clone_errno;

}

int init_errno = __init_thread(thread);

if (init_errno != 0) {

// Mark the thread detached and replace its start_routine with a no-op.

// Letting the thread run is the easiest way to clean up its resources.

atomic_store(&thread->join_state, THREAD_DETACHED);

__pthread_internal_add(thread);

thread->start_routine = __do_nothing;

thread->startup_handshake_lock.unlock();

return init_errno;

}

// Publish the pthread_t and unlock the mutex to let the new thread start running.

*thread_out = __pthread_internal_add(thread);

thread->startup_handshake_lock.unlock();

return 0;

}

可以看到pthread_create是通过clone的系统调用来创建线程的。

线程安全

==================================================================

知道了什么是线程,也知道了线程是如何产生的,接下来了解一下线程在使用过程中遇到的安全问题,以及如何解决线程安全问题。

导致线程安全的原因


在使用多线程时,不可避免的会遇到线程安全问题,为什么会有线程安全问题呢?主要是这三个原因导致的。

  1. 原子性

  2. 可见性

  3. 顺序性

原子性

前面说过,一个线程对应了一个轻量级进程。而进程之前的切换,是内核采完全公平算法进行切换的,我们无法控制这个过程。所以一个正在运行的线程,可能随时被内核切换,变成非运行状态,一旦我们正在运行的线程发生了切换,就会导致当前线程的执行过程发生中断,这种情况下就会产生线程安全问题。

看一下这样一个简单的函数

int count;

void methodA(){

count = 0;

count = count + 1;

assert count > 1:“产生了线程安全问题”;

}

这个简单的函数在多线程并发的情况下,count就会产生线程安全问题。它再多线程中运行的流程可能如下。

如果函数按照上图的流程执行,就会出现count的值为2的情况,和我们预期的值不一样,导致程序崩溃。

可见性

想要了解什么是可见性,我们先要了解一点计算机硬件的架构知识。硬件层面将存储体系划分为外存、主存、高速缓存和寄存器,后三者又称为内存。为什么要这样设计呢?因为CPU的运行速度是远高于内存的读写速度的,如果CPU直接读写内存,就会出现CPU要浪费很多时间在等待内存的读写上,这一点和前面提到的I/O密集型场景会让CPU造成浪费是一样的道理。为了解决这个问题,于是设计了寄存器,高速缓存和主存三种内存存储器,寄存器是CPU的工作内存,它的读写速度如果是火箭,高速缓存的读写速度就是汽车,而内存的读写速度就是人走路的速度。

再来说一说高速缓存,它也被称为Cache,是位于CPU与主内存间的一种容量较小但速度很高的存储器,一般分为L1,L2,L3三级缓存,在运行速度方面,L1最快、L2次快、L3最慢;容量大小方面,L1最小、L2较大、L3最大,如骁龙865的L2就是512KB,L3是4MB。

CPU在读数据会先在最快的寄存器寻找需要的数据,找不到再去L1,L2,L3最后到L4一次寻找。写数据时,也会先将数据写道寄存器,然后再同步到L1,L2或者L3中的Cache,最后再同步到内存中。在这种架构下,多核CPU就会产生数据不一致的情况。

为什么会产生不一致的情况呢?以上面双核的架构运行这个函数为例。

int a = 0;

void methodA(){

a = a+1 ;

printf(a);

}

这个函数被CPU0中的线程A和CPU1中的线程B同时执行,将两个线程都执行完毕后,a的值应该是2,因为被加1了两次,但是在这种存储架构下,就会出现a的值为1的情况。

会出现这个问题的原因就是可见性,CPU0对a的操作,不能让其他的线程立刻可见,所以就出现了线程的安全性问题。

顺序性

为了性能优化,虚拟机和CPU都会对指令重排序,这样就会导致我们的程序执行的顺序实际编码的顺序不一致。

这里举一个我们用的非常频繁的例子:单例,来说明顺序性导致的线程安全问题。这是一个双重检查单例模式的实现,在大部分情况下,程序都能正常运行,一旦发生顺序问题,就可以导致程序崩溃。

public class Singleton {

private static Singleton instance;

private Singleton(){

}

public static Singleton getInstance(){

if(instance==null){

synchronized(Singleton.class){

if(instance==null){

instance = new Singleton();

}

}

}

return instance;

}

}

new Singleton的创建过程分为:分配内存,在内存中初始化Instance,然M的地址赋值给Instance这三步,如果这三步的顺序被重排,按照如下执行。

可以看到,如果先把M的地址赋值给Instance这一步先执行,此时切换了线程B,线程B会判断instance不会空,然后返回未初始化的Singlenton,导致程序崩溃。

解决线程安全的方案


通过前面一节的讲解,我们已经知道了产生线程安全的原因,那么如何解决线程安全呢?主要有两个解决方案

  1. 确保任何时候,都只能有一个线程进入共享的程序段(临界区)

  2. 确保各个线程之间没有共享的资源(临界资源)

互斥或者同步可以实现任何时候,都只有一个线程能进入到临界区,线程本地变量如LocalThread可以实现线程间没有临界资源。下面详细介绍
一下互斥同步线程本地变量这三种实现线程安全的方法。

互斥

这里首先介绍一下实现互斥的几种常用的方式

  1. 屏蔽中断

  2. 软件实现的锁变量

  3. 软件实现的互斥算法

  4. 硬件指令

屏蔽中断

屏蔽中断是单核处理器系统中,实现互斥最简单的办法。某个线程进入临界区后立即屏蔽所有中断,屏蔽中断后,CPU便无法进行线程的切换,没有线程的切换,也就不会导致多个线程进入临界区引起的并发问题,当这个线程离开临界区时,再将中断打开。

但是这个方案有两个明显的缺点

  1. 用户进程不能拥有屏蔽中断的权利,如果用户进程拥有屏蔽中断的权利,那么随便一个恶意软件无限屏蔽中断就可以让系统无响应。所以只有系统进程才能使用这种方式实现互斥。

  2. 在多核处理器中,屏蔽中断只能屏蔽自己线程所处的CPU,而无法屏蔽其他CPU,这种情况下即使屏蔽也中断,依然还会有其他线程能进入临界区

因为这两个明显的缺点,屏蔽中断并不是一个比较好的互斥的方式

软件实现的锁变量

软件实现的锁变量是很多新手程序员常用的实现互斥的方式。我们经常会在程序中看到通过boolean或者int类型的变量来实现if else的判断,比如当值为true时,进入if的逻辑,false时,进入else的逻辑。

在前面已经说过,原子性是产生线程安全的原因之一,但是boolean或者int这些常用的基本类型的赋值操作是不具备原子性的,所以通过软件实现的锁变量用在临界区的互斥上,依然会导致多个线程都能进入临界区产生线程安全问题。

因此,软件实现的锁变量,也不是一个比较好的互斥的方式。

软件实现的互斥算法

比较有名的互斥算法是Peterson算法,这里简单的介绍一下这个算法的实现。

int turn;

int flat[2] = {false};

void engerRegion(int threadId){

flag[threadId] = true;

turn = 1 - threadId;

while(flat[threadId] == true&& turn == (1 - threadId)){};

//临界区

……

//退出临界区

flag[threadId] = false;

}

现在有两个线程P0和P1,当P0进入到临界区之前,会将flag[0]置为true,并将标志位turn设置为1(1-线程号0),然后通过while循环判断另一个线程的flag标志是否为trueflag[1] == true以及turn变量是否等于另一个线程号turn==1,如果是的话则说明另一个线程在临界区,会进入while循环等待,如果不是,则说明另一个线程没在临界区,可以进入临界区。

为什么这个算法能实现互斥呢?有这两种场景

  1. P0和P1同时都在执行这段代码

在这种情况下,线程P0将turn置为了1,这个时候线程P1又将turn置为了0。当线程P0进入while判断,对P0来说,这个时候flag[1-线程号]也就是flag[1] 为true,但是turn却是flase,不满足while循环的条件,所以P0会进入临界区。但是P1在while判断时,flag[0]为true,并且turn为0,满足while的条件,于是会一直循环,直到p0退出临界区。

  1. 只有一个线程在执行这段代码

在这种情况下,如果是P0在执行这段代码,while循环的判断中,flag[1]是false,不满足while循环的判断,于是P0会进入临界区。

可以看到,不管是同时只有一个线程在执行这段代码,还是同时两个线程都执行这段代码,都能保证只有一个线程进入临界区。这个时候会有人问,如果是三个线程,四个线程或者多个线程的情况呢?这就是Peterson算法的缺点,它只能满足两个线程的互斥,但是基于Peterson衍生出来的Filger算法能满足多个线程的互斥,Filger主要是将flag和turn进行了扩展,思路都是一样的,这里就不详讲了,它的实现如下。

// initialization

level[N] = { -1 }; // current level of processes 0…N-1

waiting[N-1] = { -1 }; // the waiting process of each level 0…N-2

// code for process #i

for(l = 0; l < N-1; ++l) {

level[i] = l;

waiting[l] = i;

while(waiting[l] == i &&

(there exists k ≠ i, such that level[k] ≥ l)) {

// busy wait

}

}

// critical section

level[i] = -1; // exit section

通过互斥算法可以实现互斥,但是软件实现的互斥在性能上不太好,特别是在大量的并发情况下,通过while循环遍历的方式,性能会更差。所以互斥算法也不是比较好的互斥的方式。

硬件指令

屏蔽中断,软件锁变量和互斥算法都不是很好的实现互斥的方式,那么有没有实现互斥的最好的办法呢?有,那就是硬件支持的互斥。

从早期处理器支持的:测试并设置(Test-and-Set), 获取并增加(Fetch-and-Increment),交换(Swap)。到现代处理器才开始支持的:比较并交换(Compare-and-Swap),加载链接/条件存储(Load-Linked/Store-Conditional)。这五种指令都是通过硬件支持的原子操作,通过这五种方式,我们就能比较完美的实现互斥。

硬件指令原子性的原理都是通过lock指令将内存总线锁住,以禁止其他CPU在本指令结束之前访问内存,内存总线只有一条,并且是独占的,不管多核还是单核,同一时间,只有一个CPU能占用总线。

这里详细介绍一下测试并设置(TAS)和比较并交换(CAS),加载链接/条件存储(LL/SC)**这两个硬件指令,因为这两个是用的最多的两个指令。

测试并设置(TAS)

TAS指令会向某个内存地址(这个内存地址只有1bit,所以值非0即1)写入值1,并且返回这块内存地址存的原始值。TAS指令是原子的,这是由实现TAS指令的硬件保证的(这里的硬件可以是CPU,也可以是实现了TAS的其他硬件),我们看一下如何通过TAS实现自旋锁。

byte lock = 0 //shared state

void engerRegion(){

//获取锁

while(test_and_set(lock)==1){}

// 临界区代码

……

//释放锁

lock = 0 //release

}

在while循环中,通过test_and_set对lock进行操作,如果lock返回值为1,说明已经有其他线程将lock的值设置成了1,所以会在while中不断的循环,知道其他线程退出临界区,将lock设置成了1,这次,这个线程就可以进入临界区,并且重新将lock设置成了1。通过空转循环检测的锁被称为自旋锁,TAS是Linux系统中实现自旋锁最常用的一种方式。

但是TAS也有一些缺点

  1. 第一点是TAS的值非0即1,这就导致通过TAS实现的锁只有两种状态,它用来实现互斥是很合适的,但是在一些更复杂的条件判断中,仅仅只通过互斥可能会满足不了要求。

  2. 第二个涉及到了TAS保证可见性的处理,当TAS每次将lock写为1时,都需要发送缓存一致性协议(缓存一致性协议后面会详细讲)通知其他Cache lock值已经失效,而发送协议需要占用总线流量,所以TAS在总线流量占用是比较大的。

比较并交换(CAS)

CAS指通过将某个内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值,CAS的逻辑比TAS要复杂很多,所以这里通过代码模拟CAS的过程。

boolean cas(long lock, long oldValue, long newValue)

{

if(lock != oldValue)

return false;

lock = newValue;

return true;

}

lock是我们的锁,当他和和指定的值oldValue不等时,CAS返回失败;如果相等时,CAS成功,将lock设置成新值。虽然这里面的步骤很多,但是整个流程由硬件支持的原子性操作。CAS的汇编指令是cmpxchg,它的实现如下。

#define LOCK_IF_MP(mp) __asm cmp mp, 0 \

__asm je L0 \

__asm _emit 0xF0 \

__asm L0:

inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) {

// alternative for InterlockedCompareExchange

int mp = os::is_MP();

__asm {

mov edx, dest

mov ecx, exchange_value

mov eax, compare_value

LOCK_IF_MP(mp) // 如果是多处理器的话,则需要添加Lock锁住总线

cmpxchg dword ptr [edx], ecx

}

}

通过cmpxchg的汇编可以看到,如果是多处理器情况,会在指令添加lock前缀,lock是对原子性,可见性和顺序性的保证。

Intel的手册对lock前缀的说明如下:

  1. 确保对内存的读改写操作原子执行。在Pentium及Pentium之前的处理器中,带有lock前缀的指令在执行期间会锁住总线,使得其他处理器暂时无法通过总线访问内存。但这也会带来昂贵的开销。从Pentium 4,Intel Xeon及P6处理器开始,intel在原有总线锁的基础上做了一个很有意义的优化:如果要访问的内存区域(area of memory)在lock前缀指令执行期间已经在处理器内部的缓存中被锁定(即包含该内存区域的缓存行当前处于独占或以修改状态),并且该内存区域被完全包含在单个缓存行(cache line)中,那么处理器将直接执行该指令。由于在指令执行期间该缓存行会一直被锁定,其它处理器无法读/写该指令要访问的内存区域,因此能保证指令执行的原子性。这个操作过程叫做缓存锁定(cache locking),缓存锁定将大大降低lock前缀指令的执行开销,但是当多处理器之间的竞争程度很高或者指令访问的内存地址未对齐时,仍然会锁住总线。

  2. 禁止该指令与之前和之后的读和写指令重排序。

  3. 把值数据刷新到内存中。

cmpxchg只在Intel的架构上才支持,ARM架构并不支持CAS,所以在Android系统上的原子操作并不是通过CAS来实现的。

我们接着看一下如何通过CAS实现一个自旋锁。

int lock = 0 //shared state

void engerRegion(){

//获取锁

while(cas(lock,0,1)){}

// 临界区代码

……

//释放锁

lock = 0 //release

}

在while的条件判断中,lock会和oldValue比较是否相等,如果不等,说明有其他线程将lock设置成了1并进入了临界区,所以当前线程会通过while空循环不断的进行cas操作,知道其他线程退出临界区,将lock设置成了0,此时cas成功,并将lock改成了1。

CAS比TAS性能更好,是因为它改进了TAS中提到的两个缺点

  1. CAS的可以实现更复杂的条件判断,因为lock并不是byte,所以我们可以设置成任意一个数字代表了其中一个条件

  2. CAS只有在cas成功时,才会将lock的值写为期待值,也就是只会写一次值,所以只需要发送一次MESI广播,告知其他的cachelock已经被改写。

CAS解决了TAS的值非零即一的问题,但也带来了另外一个问题,也就是ABA问题。

int lock = 0 //shared state

void method1(){

//获取锁

while(cas(lock,0,1)){}

// 临界区代码

……

//释放锁

lock = 0 //release

}

void method2(){

//获取锁

while(cas(lock,1,0)){}

// 临界区代码

……

//释放锁

lock = 1 //release

}

如果有1,2,3三个线程,1和2线程访问method1,3线程访问method2。线程1和线程2都要访问method1,但是线程1先进入到method1的临界区,这个时候lock的值是1,线程2由于cas失败,会陷入while循环阻塞。这个时候线程3要访问method2,并且进入临界区的条件时lock值为1,线程3满足进入临界区的条件,但同时将lock值改为1,这个时候线程2cas成功了,于是线程1和线程2这个时候都在临界区,此时就有了线程安全问题。ABA问题总结起来就是一个值A改成了B,又被改成了A,但是cas检测不出被改动过。

为什么TAS没有ABA的问题呢?因为TAS进入临界区的条件是只有lock为零才能进入临界区,其他条件都无法进入临界区,所以它也无法实现上面这种多条件的并发任务。JVM通过给每个变量添加了版本号,来通过版本是否一致解决了ABA问题。

加载链接/条件存储(LL/SC)

为什么要介绍LL/SC呢?因为ARM平台并不支持CAS,只支持LL/SC,所以作为Android开发,需要对LL/SC能够了解。LL/SC和CAS在理论上是等价的,LL指令读取一个内存中的数据并存到一个寄存器,然后在寄存器修改这个值,随后用SC指令将它写回到原来的内存位置中。如果LL在修改值时失败,就代表了LL/SC失败,什么情况下LL会失败呢?收到MESI一致性协议广播时都会修改失败。LL/SC在ARM的汇编指令是LDREX和STREX。

可见性和顺序性

/释放锁

lock = 0 //release

}

void method2(){

//获取锁

while(cas(lock,1,0)){}

// 临界区代码

……

//释放锁

lock = 1 //release

}

如果有1,2,3三个线程,1和2线程访问method1,3线程访问method2。线程1和线程2都要访问method1,但是线程1先进入到method1的临界区,这个时候lock的值是1,线程2由于cas失败,会陷入while循环阻塞。这个时候线程3要访问method2,并且进入临界区的条件时lock值为1,线程3满足进入临界区的条件,但同时将lock值改为1,这个时候线程2cas成功了,于是线程1和线程2这个时候都在临界区,此时就有了线程安全问题。ABA问题总结起来就是一个值A改成了B,又被改成了A,但是cas检测不出被改动过。

为什么TAS没有ABA的问题呢?因为TAS进入临界区的条件是只有lock为零才能进入临界区,其他条件都无法进入临界区,所以它也无法实现上面这种多条件的并发任务。JVM通过给每个变量添加了版本号,来通过版本是否一致解决了ABA问题。

加载链接/条件存储(LL/SC)

为什么要介绍LL/SC呢?因为ARM平台并不支持CAS,只支持LL/SC,所以作为Android开发,需要对LL/SC能够了解。LL/SC和CAS在理论上是等价的,LL指令读取一个内存中的数据并存到一个寄存器,然后在寄存器修改这个值,随后用SC指令将它写回到原来的内存位置中。如果LL在修改值时失败,就代表了LL/SC失败,什么情况下LL会失败呢?收到MESI一致性协议广播时都会修改失败。LL/SC在ARM的汇编指令是LDREX和STREX。

可见性和顺序性

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 【Android春招每日一练】(十三) 剑指4题+Android基础

    文章目录概览剑指offer1.49 第一个只出现一次的字符1.50 数组中的逆序对1.51 两个链表的第一个公共节点1.52 在排序数组中查找数字 IAndroid基础Android IPC几种方式Bitmap压缩策略Android动画总结进程优先级总结概览 剑指offer&#xff1a;第一个只出现一次的字符、数组中的逆…...

    2024/5/5 18:17:33
  2. Java依赖冲突高效解决之道

    一 概述 由于阿里妈妈联盟团队负责业务的特殊性&#xff0c;系统有庞大的对外依赖&#xff0c;依赖集团六七十个团队服务及N多工具组件&#xff0c;通过此文和大家分享一下我们积累的一些复杂依赖有效治理的经验&#xff0c;除了简单技术技巧的总结外&#xff0c;也会探讨一些…...

    2024/4/14 3:04:31
  3. L2-023 图着色问题 (25 分)

    L2-023 图着色问题 (25 分) 图着色问题是一个著名的NP完全问题。给定无向图G(V,E)&#xff0c;问可否用K种颜色为V中的每一个顶点分配一种颜色&#xff0c;使得不会有两个相邻顶点具有同一种颜色&#xff1f; 但本题并不是要你解决这个着色问题&#xff0c;而是对给定的一种颜…...

    2024/4/5 4:01:42
  4. 【IP路由基础(直连路由、静态路由的三种配置)】【上】--20211203

    目录 一、三层路由的产生背景 1.网段之间的通信 2.路由 1.路由信息​ 基本路由思想&#xff1a; 2.路由表 路径信息&#xff08;路由信息&#xff09;&#xff1a; 3.路由来源 1&#xff09;直连路由​ 1.路由优先级&#xff08;取值越小越优先&#xff09; 2.开销值&a…...

    2024/4/14 3:04:11
  5. Web语义化(HTML5语义化标签)

    转载文章&#xff1a;https://www.cnblogs.com/weixiao-he/p/8630084.html 做了部分补充 什么是Web语义化 Web语义化是指使用恰当语义的html标签、class类名等内容&#xff0c;让页面具有良好的结构与含义&#xff0c;从而让人和机器都能快速理解网页内容。包含了html标签语义…...

    2024/4/7 17:34:23
  6. Raft协议图解,缺陷以及优化

    结点的状态 每个结点可以有三种状态&#xff1a;Follower&#xff0c;Candidate&#xff0c;Leader。所有的结点都是从Follower状态开始的 如果followers没有收到leader的RPC消息&#xff08;心跳&#xff09;&#xff0c;则可以转换为candidate&#xff0c;如下图node a&…...

    2024/4/19 8:35:53
  7. Python必看书单

    Python必看书单 学习和使用 Python 这么多年&#xff0c;我买了很多书&#xff0c;也看了很多技术书&#xff0c;后来发现书不在于多&#xff0c;而在于经典。 读经典的书是站在巨人的肩膀上&#xff0c;看得远、悟得深~&#xff0c;说实话我这些年的技术进展都是靠这些书籍的…...

    2024/4/26 0:27:34
  8. OpenHarmony轻量系统开发【2】源码下载和开发环境

    摘要&#xff1a;本文简单介绍OpenHarmony开发环境&#xff0c;代码下载、版本更新日志等。 适合群体&#xff1a;想要上手开发OpenHarmony设备 2.1源码下载 关于源码下载的&#xff0c;读者可以直接查看官网&#xff1a; https://gitee.com/openharmony/docs/blob/master/zh…...

    2024/5/5 16:29:50
  9. DM8在银河麒麟V10下的安装

    1、软件版本介绍 操作系统&#xff1a;银河麒麟v10 sp2 数据库&#xff1a;DM8企业版 2、规划安装用户和组&#xff1a; [rootKylinDCA03 opt]# groupadd dinstall [rootKylinDCA03 opt]# useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba [rootKylinDCA03 opt]#…...

    2024/4/17 9:38:16
  10. Spring Transactional

    有7种&#xff0c;分3类 死活不要事务 NEVER, NOT_SUPPORTED 可有可无的 SUPORTS 有好几种不同的transactionManager&#xff0c;现在公司用的hibernate transactionInterceptor继承自methodInterceptor&#xff0c;methodInterceptor是一个aop的拦截器&#xff0c;调用invo…...

    2024/4/17 21:58:41
  11. WinCC读取串口扫描枪案例

    目录 一 MSComm控件注册 二 准备微软脚本调试器 三 WinCC画面制作 四 创建全局脚本VBS 五 项目启动前的配置 六 关于USB扫描枪和串口扫描枪 本文以WinCC通过VBS脚本进行串口通讯&#xff0c;以读取扫描枪为例进行测试 参考资料&#xff1a; MScomm控件注册方法&#xf…...

    2024/4/14 3:06:18
  12. 力扣解题:罗马数字转整数

    罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#xf…...

    2024/4/7 17:34:14
  13. EXCEL的交集和并集操作

    交集运算符 空格&#xff0c;可以是 EXCEL交集运算符G16:G18 G18:G20G18得内容如果两者没有交集会返回空&#xff01;SUM(G10:G12 I10:I12) #NULL! 或 G10:G12 I10:I12 #NULL! 并集呢 也不能用VBA的 union()...

    2024/5/5 8:36:44
  14. InnoDB数据页结构

    前言 之前说过&#xff0c;记录是数据库操作的基本单位&#xff08;如不理解请看InnoDB记录结构&#xff09;&#xff0c;数据存储在磁盘中&#xff0c;数据库操作在内存中进行&#xff0c;要完成对数据库的操作就要进行磁盘和内存的交互&#xff0c;但是如果数据众多&#xf…...

    2024/4/18 13:07:59
  15. 2022-01-26

    从 Vertex 到 Subgraph 再到 PIE: 并行图计算编程模型概览 对于图计算来说&#xff0c;一个基础性的问题是如何选取合适的编程模型。它不仅决定了用户上手的难易程度&#xff0c;还对系统的整体性能有很大的影响。在本篇文章中&#xff0c;我们将介绍三种常见的并行图计算编程模…...

    2024/4/14 3:05:27
  16. 快速查询的秘籍 —— B+索引的建立

    前言 之前的文章说过&#xff0c;InnoDB存储数据的单位是页&#xff0c;各个数据页之间采用双向链表连接起来&#xff1b;而每个数据页中的记录之间又通过单向链表连接&#xff0c;而记录又分为若干个组&#xff0c;组采用最大记录的记录信息作为槽信息&#xff0c;多个槽组合…...

    2024/4/7 17:34:10
  17. 数据库alert报错:ORA-00202、ORA-15081、ORA-27072

    思路分析&#xff1a; 1、发现数据库宕机&#xff0c;检查alert日志发现如下出现控制文件&#xff1a;I/O错误 Thu Apr 11 06:40:14 2019 WARNING: Read Failed. group:2 disk:1 AU:675 offset:16384 size:16384 WARNING: failed to read mirror side 1 of virtual extent 0 …...

    2024/4/14 3:05:22
  18. base64编码处理大文件

    在做项目的时候遇到需要将文件转为base64编码&#xff0c;并存储在文件中。 在将文件转为base64编码是会将文件读入内存&#xff0c;进行base64编码&#xff0c;输出到文件中。代码入下&#xff1a; FileInputStream stream new FileInputStream("D:\\桌面\\程序员-第4…...

    2024/4/14 3:04:57
  19. armeabi-v7a arm64-v8a armeabi x86 x86_64区别

    Android 设备的CPU类型(通常称为”ABIs”) 查看安卓手机CPU类型armeabi&#xff0c;armeabi-v7a&#xff0c;还是arm64-v8a armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.arm64-v8a: 第8代、64位ARM处理器&#xff0c;很少设备&a…...

    2024/5/5 14:37:17
  20. 如何使用ADB抓取pad上的日志并导出本地【windows】

    1&#xff1a;什么是ADB? ADB是android sdk里的一个工具&#xff0c;用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机). 2&#xff1a;ADB下载链接&#xff1a; Windows版本&#xff1a;https://dl.google.com/android/repository/platform-tools-lat…...

    2024/5/5 15:24:31

最新文章

  1. RK3568平台(基础篇)linux错误码

    一.概述 linux应用程序开发过程中&#xff0c;经常会遇到一些错误信息的返回&#xff0c;存在的可能性有&#xff0c;参数有误、非法访问、系统资源限制、设备/文件不存在、访问权限限制等等。对于这类错误&#xff0c;可以通过perror函数输出具体描述&#xff0c;或者通过str…...

    2024/5/5 19:26:30
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【GIS学习笔记】polygon和multipolygon的转换

    写得比较全的polygon和multipolygon的介绍&#xff1a; https://www.cnblogs.com/billygisboy/p/17415573.html 从文本文件上看二者的区别就是"type":"Polygon"和"type":"MultiPolygon"&#xff0c;以及MultiPolygon多一层[]或()。 …...

    2024/5/3 2:06:35
  4. MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用

    数据结构 我们知道MySQL的存储引擎Innodb默认底层是使用B树的变种来存储数据的 下面我们来复习一下B树存储 B树存储 哈希存储的区别 哈希存储,只能使用等值查询 B树与B树存储 我们知道B树实际上就是B树的变种 那么为啥使用B树而不是使用B树呢? 我们知道效率的高低主要取决于…...

    2024/5/4 8:59:40
  5. 数据挖掘|贝叶斯分类器及其Python实现

    分类分析|贝叶斯分类器及其Python实现 0. 分类分析概述1. Logistics回归模型2. 贝叶斯分类器2.1 贝叶斯定理2.2 朴素贝叶斯分类器2.2.1 高斯朴素贝叶斯分类器2.2.2 多项式朴素贝叶斯分类器 2.3 朴素贝叶斯分类的主要优点2.4 朴素贝叶斯分类的主要缺点 3. 贝叶斯分类器在生产中的…...

    2024/5/4 6:18:41
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/4 23:54:56
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/4 23:54:56
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/4 23:55:17
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/4 18:20:48
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/4 23:55:06
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/4 23:55:01
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57